java - 多态性 vs 覆盖 vs 重载

标签 java oop polymorphism overloading overriding

在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/

相关文章:

java - objectify-appengine - 嵌入式类 - 不是受支持的属性类型

java - 如何使用对话框更改 listView 中 TextView 的文本

PHP - call_user_function_array 或 Reflection 类通过引用传递?

java - 为什么我可以创建一个父类类型的变量

vb6 - 尝试在 VB6 中学习多态性等,但我的代码没有按照我的意愿进行

java - 用另一个和所有引用替换 Java 对象实例

java - Swing按钮重画问题

javascript - 为 PrototypeJS 类的类方法中的函数提供对类成员的访问权限

java - 为什么对象引用在它存储的集合中也没有改变?

c++ - c++ 中的多态性与模板化类