小编典典

多态性 vs 覆盖 vs 重载

all

在 Java 方面,当有人问:

什么是多态性?

重载覆盖 是一个可以接受的答案吗?

我认为还有更多的东西。

如果您有一个抽象基类,它定义了一个没有实现的方法,并且您在子类中定义了该方法,那仍然是覆盖吗?

我认为 重载 肯定不是正确的答案。


阅读 86

收藏
2022-03-28

共1个答案

小编典典

表达多态性最清晰的方法是通过抽象基类(或接口)

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
...
2022-03-28