混淆java overriding vs polymorphism

时间:2015-09-30 07:48:46

标签: polymorphism override

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

请参阅以下编码,

    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();

会显示相同的结果,然后我想知道为什么会提到一些关于使用

的教程
Father x=new Son();
            x.eat();

而不是使用

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

直接?

1 个答案:

答案 0 :(得分:0)

在实践中,很常见的是,你没有使用具有真实类型的课程(在这种情况下就像儿子一样),而是使用其中一个超类课程(像本例中的父亲一样)或者使用其中一个接口(如果有的话,可以使用Serializable类)。

在像java这样的多变形式语言中,你不需要知道真正的类是非常有用的,你可以将它简单地用作更通用的类。例如,如果您要绘制形状,则可以将它们保存在< List< Drawable>'可绘'

interface Drawable {
   //drawes the shape on the screen
   public void drawMe();
}

并且会有像Rectange或Triangle这样的实现类。

现在,在您的业务逻辑中'你不想知道矩形或三角形的细节或任何进一步的形状,你唯一需要知道的是,这个类实现了Drawable接口,所以你可以调用一个' drawMe'方法,所以你可以浏览像这样的列表项

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

我希望我能对此有所了解:)