类只能在调用块中实例化时调用接口方法

问题描述 投票:-1回答:1

类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具有方法sayMe。但是这些都不在接口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,但是仍然,我的开关块不应该起作用吗?

我还试图在实例化它之后立即在同一个switch块中调用方法。我收到了同样的错误。

java interface switch-statement instantiation cannot-find-symbol
1个回答
0
投票

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

((ActualClass) obj).writeMe();
© www.soinside.com 2019 - 2024. All rights reserved.