【问题标题】:Method not found in derived class inherited from abstract class [duplicate]在从抽象类继承的派生类中找不到方法[重复]
【发布时间】:2021-05-14 01:49:12
【问题描述】:
abstract class superclass {
  public abstract void method();
}
class subclass extends superclass {
  public void method() {
    //do something
  }
  public void newMethod() {
    //do something
  }
}
public class mainclass {
  public static void main(String[]args) {
    superclass abc = new subclass();
    abc.method();
    abc.newMethod(); //cannot find symbol error
  }
}

在上面的例子中,新方法可以不写在抽象类的派生类中吗?如果我这样做,会引发错误。

【问题讨论】:

  • 您应该遵循 Java 命名约定。类名应以大写开头。
  • @maloomeister 这只是一个例子。我的主程序所有类名都以大写开头。
  • 您将abc 定义为superclass 类型。但是superclass 没有定义newMethod。因此,要调用newMethod(),您需要事先将其转换为subclass。 -> ((subclass) abc).newMethod();

标签: java oop inheritance methods abstract-class


【解决方案1】:

实际上,当扩展超类时,您可以添加更多方法。在这种情况下,您将new subclass() 分配给superclass 类型的变量,这意味着您只能访问属于该类型的方法。在这种情况下,这只是method()。如果你想同时使用这两种方法,你应该改写:

subclass abc = new subclass();

或按需投射:

((subclass) abc).newMethod();

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 2021-08-14
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多