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