2

私はabstract class次のような変数を持つを持っています:

public abstract class MyAbstractClass {

    int myVariable = 1;

    protected abstract void FunctionThatUsesMyVariable();
}

class次に、次のコードを使用してインスタンス化しようとすると、表示されmyVariableません。

MyAbstractClass myClass = new MyAbstractClass() {

    @Override
    protected void FunctionThatUsesMyVariable() {
        // TODO Auto-generated method stub
    }
}; 

私は何を間違っているのですか、そして私が達成しようとしていることをどのように達成できますか?

4

4 に答える 4

7

パッケージにアクセスできることを宣言しmyVariableており、2つのクラスが異なるパッケージに存在します。したがって、変数は継承するクラスには表示されません。アクセス権を使用して表示するように宣言するprotectedか、2つのクラスを同じパッケージに入れることができます。

public abstract class MyAbstractClass {

    protected int myVariable = 1;

    protected abstract void FunctionThatUsesMyVariable();
}
于 2013-03-27T10:43:41.593 に答える
2

私のために働くようです:

public class Test {
  public static abstract class MyAbstractClass {
    int myVariable = 1;
    protected abstract void FunctionThatUsesMyVariable();
  }

  public void test() {
    MyAbstractClass myClass = new MyAbstractClass() {
      @Override
      protected void FunctionThatUsesMyVariable() {
        myVariable = 2;
      }
    };
  }

  public static void main(String args[]) {
    new Test().test();
  }
}

異なるパッケージで2つのクラスを宣言していると思われます。それが必要な場合は、変数を作成する必要がありますprotected(またはpublic必要な場合)。あるいは、明らかに、それらを同じパッケージに入れます。

于 2013-03-27T10:44:54.473 に答える
1

変数を保護対象として宣言します。package-privateデフォルトです。

于 2013-03-27T10:43:18.087 に答える
1

抽象クラスをまだサブクラス化/拡張しているため、保護しない限り、フィールドは継承されません。

于 2013-03-27T10:43:33.117 に答える