0

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());

}

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

请帮忙

谢谢

4

1 回答 1

6

您正在尝试以静态方式调用实例方法,并且由于该方法不是静态的,因此这是行不通的。你必须

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

IE,

public class SeperateClass {

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

只是好奇,但是为什么 Command 是抽象的呢?


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

你能提供一个链接来帮助我做到这一点吗?

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


编辑 2
您在评论中声明:

如果我删除了抽象,则会出现一个错误,表明 Command 类不是抽象的

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

您将想告诉我们有关此错误的更多详细信息。

于 2013-10-24T15:03:03.563 回答