如果没有在 中明确解析 (Sub1),在下面实现 testCall2 的最佳方法是什么?
class Super {
}
class Sub1 extends Super {
}
class Sub2 extends Super {
}
public void testCall2(Super in) {
testCall(in); // <~~~ Compilation Error
}
public void testCall(Sub1 sub) {
}
public void testCall(Sub2 sub) {
}
答案 0 :(得分:2)
您必须重构并使用多态。在testCall
Super
方法
class Super {
public void testCall() {}
}
并在子类中实现它。
然后调用它
public void testCall2(Super in) {
in.testCall();
}
否则,您必须使用强制转换将值的类型转换为任一方法所期望的类型。
答案 1 :(得分:0)
显然,它会产生编译时错误,因为您正在创建类体外的方法。你的所有方法都是课外的。
class Super {
}
class Sub1 extends Super {
}
class Sub2 extends Super {
}// your all three classes are started and ended immediately
public void testCall2(Super in) {
testCall(in); // <~~~ Compilation Error
}
public void testCall(Sub1 sub) {
}
public void testCall(Sub2 sub) {
}
//and all three methods are defined out of any class body.