在Java方面,当有人问:
what is polymorphism?
重载或覆盖是可接受的答案吗?
我认为还有更多。
如果你有一个抽象基类,它定义了一个没有实现的方法,而你在子类中定义了那个方法,那仍然是覆盖吗?
我认为重载肯定不是正确的答案。
最佳答案
表达多态性最清晰的方法是通过抽象基类(或接口(interface))
public abstract class Human{
...
public abstract void goPee();
}
这个类是抽象的,因为 goPee()
方法对于人类来说是不可定义的。它只能为子类 Male 和 Female 定义。此外,人类是一个抽象概念——你不能创造一个既不是男性也不是女性的人。必须是其中之一。
所以我们使用抽象类来推迟实现。
public class Male extends Human{
...
@Override
public void goPee(){
System.out.println("Stand Up");
}
}
和
public class Female extends Human{
...
@Override
public void goPee(){
System.out.println("Sit Down");
}
}
现在我们可以让满屋子的人去小便。
public static void main(String[] args){
ArrayList<Human> group = new ArrayList<Human>();
group.add(new Male());
group.add(new Female());
// ... add more...
// tell the class to take a pee break
for (Human person : group) person.goPee();
}
运行它会产生:
Stand Up
Sit Down
...
关于java - 多态性 vs 覆盖 vs 重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/154577/