在不扩展它的类中使用抽象类方法

use*_*805 0 java methods class abstract

H,初学者在这里.

我有一个名为'Command'的抽象类,它有几个扩展它的子类,所有这些都是命令,并使用'Command'中的变量和一些方法.在一个单独的类(不扩展Command)中,有一些代码可以在用户这样做时调用这几个类.Command类有一些我想在单独的类中读取的变量(使用getter方法).

public abstract class Command {

    private String variableName;

    public String getCurrentVariableName() {
        return variableName;
    }
}



public class SeperateClass {

//  rest of code

System.out.println(command.getCurrentVariableName());

}
Run Code Online (Sandbox Code Playgroud)

创建类的对象不起作用,因为我无法实例化抽象类.我猜我可以实例化一个子类并使用super返回它,但我不想,除非没有其他方法.

请帮忙

谢谢

Hov*_*els 6

您试图以静态方式调用实例方法,并且由于该方法不是静态的,因此不起作用.你必须

  • 创建Command对象的具体实例 - 从扩展Command的非抽象类创建.
  • 在该实例上调用方法,而不是以静态方式调用.

public class SeperateClass {

  //  rest of code
  public void someMethod() {
    Command myCommand = new ConcreteCommand();
    System.out.println(myCommand.getCurrentVariableName());
  }
}
Run Code Online (Sandbox Code Playgroud)

只是好奇,但为什么Command抽象开始?


编辑
您在下面的评论中说明:

你能提供一个帮助我这样做的链接吗?

您需要为我们的问题提供更多背景信息,但是对于一般性审核,您可以在此处了解有关抽象类的更多信息:抽象方法和类教程


编辑2
您在评论中说明:

如果我删除摘要,则错误表明Command类不是抽象的

您可能以错误的方式修复错误.通常,此类错误的最佳解决方案是修复编译器抱怨的问题,而不是使类抽象化.例如,这个错误通常出现在声明为实现接口的类中,如果忽略为该类提供接口声明的所有方法,编译器将给出此错误消息.在这种情况下,你不应该使类抽象,而应该给它必要的方法.

您需要告诉我们有关此错误的更多详细信息.