类只能调用接口方法,尽管已在开关块中实例化



类A、B和C都实现了InterfaceName,还包括它们自己的特定方法,这些方法没有在接口中定义。

我有这样的代码:

InterfaceName obj = null;
// initial type, can change
String type = "A"
Switch (type) {
case "A":
obj = ClassA();
break;
case "B":
obj = ClassB();
break;
case "C":
obj = ClassC();
break;

现在,基于这个块,我假设obj将被实例化为三个中的一个,因为没有其他选项。我现在有另一个开关块,它试图调用特定的方法。在本例中,假设ClassA有一个方法callMe,classB有一个法writeMe,而classC有一个方法speakMe。但这两者都没有在接口InterfaceName中定义。我的下一个代码块如下:

Switch (type) {
case "A":
obj.callMe();
break;
case "B":
obj.writeMe();;
break;
case "C":
obj.speakMe();
break;

我的IDE intelliJ用红色突出显示了所有这些方法,java在编译后给了我一个错误"找不到符号"。

我试过使用if-else块,但没有任何效果。看起来java只允许obj在接口中调用方法,而不允许在任何实现它的类中调用方法。我的猜测是因为它被声明为InterfaceName,但我的开关块不应该有一些效果吗?

我也试着在实例化后立即调用同一个开关块中的方法。我收到了同样的错误。

您需要使用包含该方法的实际类强制转换obj变量。

((ActualClass) obj).writeMe();

最新更新