Java 铸造问题(可能的解决方法)
好吧,大学给我布置了一个作业,我就是想不明白这个问题是怎么回事,我是班上唯一一个走到这一步的人,我的讲师也没有回复我 基本上是继承和多态性,我们使用父类,然后从父类创建子类Java 铸造问题(可能的解决方法),java,inheritance,casting,Java,Inheritance,Casting,好吧,大学给我布置了一个作业,我就是想不明白这个问题是怎么回事,我是班上唯一一个走到这一步的人,我的讲师也没有回复我 基本上是继承和多态性,我们使用父类,然后从父类创建子类 private HashMap<String,Aircraft> allAircraft = new HashMap<String,Aircraft>(); Aircraft plane = new Plane(reg,pass,cargo); private HashMap allairraft=
private HashMap<String,Aircraft> allAircraft = new HashMap<String,Aircraft>();
Aircraft plane = new Plane(reg,pass,cargo);
private HashMap allairraft=new HashMap();
飞机=新飞机(登记、通行证、货物);
所以家长不能使用children方法,我理解这背后的大部分概念,并设法让我的头脑绕过它。对于其中一种方法,我们被特别要求使用casting(尽管我被无数次地告知,如果我必须使用它,那么我应该重新构造),但对于另一种方法,我们被要求调用一种方法,该方法只针对两个儿童类,强制转换在这里不起作用,因为我不知道HashMap中的子类是什么
所以我的问题是,;在使用多态性时,与父类相比,我如何更喜欢两个子类方法
我的头脑简直是爆炸了。如果你需要沮丧,那么你就不再使用多态性了。如果这正是老师想要的,那么您仍然可以通过测试对象的实际类型是否合适,以安全的方式进行降级:
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();
}
如果需要向下转换,那么就不再使用多态性。如果这正是老师想要的,那么您仍然可以通过测试对象的实际类型是否合适,以安全的方式进行降级:
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();
}
如果此时无法更改基本/派生层次结构,请查看运算符。如果此时无法更改基本/派生层次结构,请查看运算符。您可以使用
getClass()
方法查找对象的确切类,或者,您也可以使用instanceof
操作符询问对象是否属于特定类型。无论采用哪种方法,都不必向对象询问其特定的类,但在某些情况下,您没有选择。您可以使用getClass()
方法找到对象的确切类,或者您也可以使用instanceof
操作符询问对象是否属于特定类型。无论哪种方式,要求对象指定其特定的类都不是很优雅,但在某些情况下,您没有选择。完美,我知道一定有一种方法可以调节它。干杯,巴德!完美,我知道一定有办法调节它。干杯,巴德!