0

Hさん、初心者です。

「コマンド」と呼ばれる抽象クラスがあり、それを拡張するいくつかのサブクラスがあります。これらはすべてコマンドであり、「コマンド」の変数といくつかのメソッドを使用します。別のクラス (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());

}

抽象クラスをインスタンス化できないため、クラスのオブジェクトを作成できません。サブクラスの 1 つをインスタンス化し、それを super を使用して返すことができると思いますが、他に方法がない限り、そうしたくありません。

助けてください

ありがとう

4

1 に答える 1

6

インスタンス メソッドを静的な方法で呼び出そうとしていますが、メソッドが静的ではないため、これは機能しません。絶対です

  • Command オブジェクトの具体的なインスタンスを作成します -- Command を拡張する非抽象クラスから作成されます。
  • 静的な方法ではなく、そのインスタンスでメソッドを呼び出します。

つまり、

public class SeperateClass {

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

ちょっと興味がありますが、そもそもなぜコマンドが抽象化されているのでしょうか?


以下のコメントであなたの状態を編集
します。

これを行うのに役立つリンクを提供できますか?

問題の背景をもっと詳しく説明する必要があると思いますが、一般的なレビューのために、ここで抽象クラスの詳細を学ぶことができます:抽象メソッドとクラスのチュートリアル


編集2
コメントで述べます:

抽象を削除すると、Command クラスが抽象ではないというエラーが表示されます

間違った方法でエラーを修正している可能性があります。多くの場合、この種のエラーに対する最善の解決策は、クラスを抽象化するのではなく、コンパイラが訴えている問題を修正することです。たとえば、このエラーは、インターフェイスを実装するように宣言されているクラスでよく見られます。インターフェイスによって宣言されたすべてのメソッドをクラスに渡さなかった場合、コンパイラはこのエラー メッセージを表示します。その場合、クラスを抽象化するのではなく、必要なメソッドを与える必要があります。

このエラーの詳細をお知らせください。

于 2013-10-24T15:03:03.563 に答える