我的意思是如果我们想要重写子类中方法的所有内容并更改其功能,为什么我们不能只编写一个具有不同名称的新方法?有什么区别?我知道这是一个简单的问题。但我是编程新手,非常困惑。 THX。
答案 0 :(得分:1)
这是为了给这类事物的常见功能提供不同的行为,例如让我们假设所有车辆都发出嘟嘟声,但是一辆Car Honk's和一辆轻便摩托车Meep Meeps!
class Vehicle {
public void beep() {
System.out.println("Beep!");
}
}
class Car extends Vehicle {
@Override
public void beep() {
System.out.println("Honk!");
}
}
class Moped extends Vehicle {
@Override
public void beep() {
System.out.println("Meep Meep!");
}
}
答案 1 :(得分:1)
这叫做Polymorphism。看看链接。
一个简单的例子是Java Collections框架。使用时,您有一个界面List
。您不想知道add
或size
的工作原理。它应该工作。
但是当您处于实施方面时,ArrayList
或LinkedList
在管理项目方面存在差异,即存储在项目中的项目。
当您查看超类中已经实现的方法时,您可能需要一种方法来使用不同的行为。现在假装你当前的代码中有一些方法调用。如果您不希望它们更改,那么您只需覆盖该方法,客户端就不必更改其代码即可使用您的功能。
答案 2 :(得分:1)
覆盖是使用继承时可用的功能。
当从另一个类扩展的类想要使用父类的大部分功能并希望在某些情况下实现特定功能时使用它。
class Animal{
public void move(){
System.out.println("Animals can move");
}
}
class Dog extends Animal{
public void move(){
System.out.println("Dogs can walk and run");
}
}
class Cat extends Animal{
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object
Animal c = new Cat(); // Animal reference but Cat object
a.move();// runs the method in Animal class
b.move();//Runs the method in Dog class
c.move();//Runs the method super method
}
}
因此,通过使用父类,您不需要在扩展动物的每个类中定义move(),您可以在必要时覆盖它。