Polymorphism java重写与多态性的混淆

Polymorphism java重写与多态性的混淆,polymorphism,overriding,Polymorphism,Overriding,我不知道我的问题是否与覆盖或多态性有关,因此期待有人提出建议 请参阅以下编码 Father f=new Father(); f.eat(); // display father's eat() Son s=new Son(); s.eat(); // display Son's eat() Father x=new Son(); x.eat(); // display Son'

我不知道我的问题是否与覆盖或多态性有关,因此期待有人提出建议

请参阅以下编码

    Father f=new Father();
    f.eat();             // display father's eat()
    Son s=new Son();
    s.eat();             // display Son's eat()
    Father x=new Son();
    x.eat();             // display Son's eat()
据悉,

Son s=new Son();
        s.eat();

将显示相同的结果,那么我想知道为什么一些教程提到使用

Father x=new Son();
            x.eat();
而不是使用

Son s=new Son();
            s.eat();

直接的

在实践中,很常见的情况是,您不使用具有真实类型的类(如本例中的Son),而是使用它的一个超类(如本例中的父类)或它的一个接口(如有可序列化类)

它在java等变形语言中非常有用,您不需要知道真正的类,只需将其作为更通用的类使用即可。例如,如果要绘制形状,可以将其保存在“列表”“可绘制”列表中,其中

interface Drawable {
   //drawes the shape on the screen
   public void drawMe();
}
还有一些实现类,比如Rectange或Triangle

现在,在您的“业务逻辑”中,您不想知道矩形、三角形或任何其他形状的细节,您唯一需要知道的是,这个类实现了可绘制的接口,因此您可以对其调用“drawMe”方法,这样您就可以像这样浏览列表项

for(Drawable d: drawables) {
  d.drawMe();
}
我希望我能就此给出一些见解:)

for(Drawable d: drawables) {
  d.drawMe();
}