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

时间:2013-10-24 15:01:56

标签: java class methods 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());

}

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

请帮忙

由于

1 个答案:

答案 0 :(得分:6)

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

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

即,

public class SeperateClass {

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

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


修改
您在下面的评论中说明:

  

你能提供一个可以帮我这么做的链接吗?

我认为你需要为我们的问题提供更多背景知识,但是对于一般性的审查,你可以在这里了解更多关于抽象类的内容:Abstract Methods and Classes Tutorial


编辑2
您在评论中说明:

  

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

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

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