好吧所以我已经从大学设定了一份任务,我无法理解这个问题,我是班上唯一一个有这么远的人,我的讲师没有回到我。
基本上是继承和多态,我们使用父类,然后从父级创建子项;
private HashMap<String,Aircraft> allAircraft = new HashMap<String,Aircraft>();
Aircraft plane = new Plane(reg,pass,cargo);
所以父母不能使用儿童方法,我理解这背后的大部分概念,并设法让我解决它。对于其中一种方法,我们特别要求使用铸造(即使我被告知无数次,如果我必须使用它然后我应该重组)但是对于另一种方法,我们被要求调用一个方法只是具体的两个子类,在这里转换不起作用,因为我不知道HashMap中的子类是什么。
所以我的问题是;在使用多态时,我如何在父类上使用两个子类方法?
我的思绪非常爆炸。
答案 0 :(得分:3)
如果你需要向下转换,那么你就不再使用多态。如果那是老师想要的,那么你可以通过测试对象的实际类型是否合适,以安全的方式向下转换:
if (plane instanceof SubClass1) {
SubClass1 s = (SubClass1) plane;
s.someSpecificMethod();
}
if (plane instanceof SubClass2) {
SubClass2 s = (SubClass2) plane;
s.someSpecificMethod();
}
如果此方法对两个子类都是通用的,则可能意味着它们实际上共享相同的接口。所以多态性可以在这里重新发挥作用:
public interface PassengerTransporter {
void someSpecificMethodToAllPassengerTransporters();
}
public class SubClass1 implements PassengerTransporter {
void someSpecificMethodToAllPassengerTransporters() {
// TODO : implement this
}
}
public class SubClass2 implements PassengerTransporter {
void someSpecificMethodToAllPassengerTransporters() {
// TODO : implement this
}
}
if (plane instanceof PassengerTransporter) {
PassengerTransporter p = (PassengerTransporter) plane;
p.someSpecificMethodToAllPassengerTransporters();
}
答案 1 :(得分:0)
如果此时无法更改基本/派生层次结构,请查看instanceof
运算符。
答案 2 :(得分:0)
您可以使用getClass()
方法找出对象的确切类,或者您也可以使用instanceof
运算符询问某个对象是否属于某种类型。无论哪种方式,不得不向对象询问其特定类别,但在某些情况下,您没有选择。