我不知道我的问题是否与覆盖或多态有关,因此期待有人提出建议。
请参阅以下编码,
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();
直接?
答案 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();
}
我希望我能对此有所了解:)