尽管java类在开关块中实例化,但它只能调用接口方法
类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。但这两个都没有在接口名称中定义。我的下一个代码块如下所示:
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,但是,我的开关块不应该有一些效果吗
我还尝试在实例化了同一开关块之后,调用该开关块中的方法。我收到了同样的错误
# 1 楼答案
您需要使用包含该方法的实际类强制转换obj变量