1

私は初心者で、助けが必要です。

したがって、プライベート変数を持つこの抽象クラスがあります。それを返す getThing() という名前のメソッドもあります。

その抽象クラスを拡張するクラスがあり、それにもプライベート変数と、元の変数をオーバーライドして抽象クラスから値を取得するメソッドがあります。

両方の値にアクセスできるようにする唯一の方法は、getSuperThing というサブクラスに 2 番目のメソッドを作成し、その中で super を使用することです。objectNae.super.getThing() のような方法で抽象クラスのメソッドにアクセスできる簡単な方法があるかどうか、好奇心から考えていました。

ありがとう ;)

4

3 に答える 3

3

変数はprivate、含まれている (抽象) クラスによってのみ参照できます。あなたが述べたように、サブクラスから、(オーバーライドされたメソッドではなく) スーパークラス メソッドを呼び出すことができます。

変数をサブクラスから (アクセサ メソッドを必要とせずに) 直接アクセスできるようにする場合は、protected代わりに作成します。クラスのメンバーへのアクセスの制御に関するドキュメントは次のとおりです。

于 2012-05-10T03:45:42.860 に答える
1

あなたの質問を正しく理解していれば、具体的なサブクラスで抽象クラスのメソッドをオーバーライドするべきではありません。抽象クラスによって返される値とは異なる値をサブクラスが返す必要がない限り (そして、それは設計が不十分であることを示唆します)、その必要はありません。

むしろ、抽象クラスのメソッドはサブクラスのメソッドとしてアクセスできます。

したがって、次の場合:

public abstract class AbstractClass {
  private int value = 3;

  public int getValue() {
   return value;
  }
}

public class ConcreteClass extends AbstractClass {
}

次に、次のことができるはずです。

new ConcreteClass().getValue()
于 2012-05-10T03:52:40.140 に答える
0

I don't think you have other ways than calling super.getThing() in the subclass's getThing() or getSuperThing() method. Abstract class must be subclassed before being used.

于 2012-05-10T04:21:26.973 に答える