Parent parent = new Child();
parent.someMethod();
在什么情况下,如上所述的分配是有用的,或者背后的逻辑解释是什么?而不是以下:
Child child = new Child();
child.someMethod();
在这两种情况下,无论如何都只会调用Child的方法。所以,为什么允许这种表示?这不是设计中允许的不必要功能吗?
我能想到的唯一原因,取决于我做的一些小事,它会让你知道" someMethod()"如果在父母中没有父母,则在父母中不可用,#34; parent.someMethod()"!
请您详细说明它是如何有用/必要的,并给我一些与面向对象概念相关的观点?我知道这与多态性有关。但我发现没有必要使用这种表示法。
非常感谢实际的现实世界的例子。感谢。
我检查以下问题,但我不觉得我有我想要的答案。 Using superclass to initialise a subclass object java
答案 0 :(得分:2)
它为你提供了对不同物体表现相同的对手。
例如Object
类。 Object
有toString()
方法。每个扩展Object的类都有toString()
方法。 (每个班级都强调Object
班级。)
现在,假设您有来自不同类的以下对象。一个人(人类),汽车(汽车类),灯(灯类)。
您想编写一个调用每个对象toString()
方法的方法。您必须编写此方法的3个不同版本。
callToString(Person p) {p.toString();}
// A method that accepts person objects.
callToString(Car c){c.toString();}
// A method that accepts car objecs.
callToString(Lamp l){l.toString();}
// A method that accepts lamp objects.
我们知道,每个3个类都来自Object
类,Object
类具有toString()
方法。我们可以编写一个接受Object
类对象的方法。
callToString(Object o){o.toString();}
现在这个方法接受Object
类对象,我们可以将它与Car,Person和Lamp一起使用,因为它们都来自Object
类。
使用新方法。
Person john = new Person();
Car ferrari = new Car();
Lamp philips = new Lamp();
callToString(john);
callToString(ferrari);
callToString(philips);