在不进行显式解析(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) {

}

最佳答案

您必须重构并使用多态性。在testCall中声明Super方法

class Super {
    public void testCall() {}
}


并在子类中实现它。

然后调用它

public void testCall2(Super in) {
    in.testCall();
}


否则,您将不得不使用强制类型转换将值的类型转换为两种方法中期望的类型。

07-26 09:27