有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

尽管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) 个答案

  1. # 1 楼答案

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

    ((ActualClass) obj).writeMe();