让我们看一下这段代码

MyClass object;
object=new MySubClass();


MySubClass扩展MyClass的位置。
在此之后,我想调用MySubClass的方法
object.myMethod();

我收到一个编译错误,但是在运行时应该可以。没有这样的显式转换,如何调用myMethod?
(((MySubClass)object).myMethod()

最佳答案

如果方法是在子类中定义的,那么您将需要instanceof子类-

MyClass object; // <-- Make this MySubClass object; **OR**
object=new MySubClass();

// instanceof
if (object instanceof MySubClass) {
  MySubClass msc = (MySubClass) object;
  msc.doSomeMethod(); // <--
}


或者您可以在MyClass中使用abstract method-

public abstract class MyClass {
  public abstract void doSomeMethod();
}


当然,MySubClass必须仍然具有doSomeMethod()

public class MySubClass extends MyClass {
  public void doSomeMethod() {
    System.out.println("Hello");
  }
}


那么你可以使用

object.doSomeMethod();

关于java - Java:调用未定义类型的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22944821/

10-11 04:49