方法重载的Java编译错误

时间:2014-12-02 02:42:22

标签: java overloading

如果没有在 中明确解析 (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) {

}

2 个答案:

答案 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.