2014-12-02 55 views
1

Java编译错误什么是实现testCall2下面没有做明确的解析(Sub1的)的最好方法?与方法重载

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) { 

} 
+1

你想调用哪个'testCall'? – 2014-12-02 02:43:26

+0

您首先需要在类中移动这些方法才能编译。在Java中,方法只能存在于类中。 – 2014-12-02 02:48:37

+0

只是其中之一,取决于instanceOf。但是,重点是我不想使用instanceOf或任何显式的转换。 – 2014-12-02 02:51:42

回答

2

你必须重构和使用多态。声明testCall方法Super

class Super { 
    public void testCall() {} 
} 

,并在子类中实现它。

然后调用它

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

否则,你将不得不使用强制转换为值的类型转换为通过两种方法预期的类型。

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.