-6

私はJavaが初めてで、助けが必要です

2 つの保護された属性を持つ抽象スーパークラスがあります。

public abstract class Superclass {
  protected int a = 0;
  protected int b = 0;
  ...
  }

次に、スーパークラスを拡張するサブクラスがあり、a と b にアクセスしたいのですが、方法がわかりません。私はウェブを検索しましたが、何も見つかりませんでした。

public class Subclass extends Superclass {
  public boolean someMethod(){
  .....
  // at the end i need to do
  a += 1;
  return true
  }
}

コンパイル エラーが表示されます:「unreachable statemen」

ご協力いただきありがとうございます。

4

6 に答える 6

2

protectedインターフェイスはメンバーを定義できません。コンパイラ エラーが表示されます。

protectedスーパークラスのメンバーはサブクラスで使用できますextends。スーパークラス (抽象スーパークラスまたはその他) の任意のクラスでそれらを参照するだけで済みます。

こちらのアクセス修飾子テーブルを参照してください。

于 2012-10-05T23:52:52.523 に答える
2

これがあれば

abstract class TestABC {
    protected int a = 0;
    protected int b = 0;
}

そしてこれ:

public class TestABCD extends TestABC{
    public void increaseA() {
      try {
        //do method including return
      } finally {
         a++;
      }
    }

    public String printIt() {
      System.err.println(t);
      increaseA();
      System.err.println(t);
    }

    public static void main(String[] args){ 
        TestABCD t = new TestABCD();
        t.printIt();
    }
}

main メソッドがサブクラス内にあるため、println の ta に直接アクセスできることがわかります。変数がprivateの代わりにある場合、protectedアクセスできません。

于 2012-10-05T23:54:22.613 に答える
1

「到達不能ステートメント」とは、コード内にプログラム内のこの行に到達できるパスがないことを意味します。保護されたフィールドとは関係ありません。この行に到達する前に常にメソッドを終了するreturnステートメントが前にあるかどうかを確認してください。a+=1または、指定した条件が常に評価されるため、決して実行されない -block にあるa+=1場合。iffalse

于 2012-10-06T00:09:17.547 に答える
0

あなたの問題は、保護されたものとはまったく関係ありません。それは、コードステートメントを、それらが属していないクラスに裸で配置しようとしていることに関係しています。代わりに、問題のあるコードの行をメソッドまたはコンストラクターに配置します。

public class Subclass extends Superclass {
  a += 1; // **** this line ****
}

コメント行は無効です。クラスに裸で属することができる唯一のコードは、変数の宣言を含まないステートメントではなく、変数の宣言または初期化を伴う宣言です。繰り返しますが、その行をコンストラクターまたはメソッドに入れます。

public class Subclass extends Superclass {
  public Subclass() {
    a += 1; // **** this line ****
  }
}
于 2012-10-06T00:02:13.107 に答える
0

クラスはそのように a & b にアクセスできる必要がありますが、「非表示」の a または b を宣言すると、スーパークラスから a & b が必要な場合、クラスはクラスを拡張します。そのように使用するだけです

少し鏡の家になりがちですが、物事が絡んだときに便利です

于 2012-10-05T23:55:02.300 に答える
0

次のような保護されたメソッドでスーパークラスを拡張するサブクラスがある場合

public abstract class SuperClass{

protected int a = 0;
protected int b = 0;

}

次のように、これらの変数をサブクラスで直接呼び出すだけです。

public class SubClass extends SuperClass{

    public Subclass(){
       System.out.println("int a value:" + a);
       System.out.println("int b value:" + b);
    }
}
于 2012-10-05T23:55:14.270 に答える