2012-05-10 9 views
1

私はnoobです。私はいくつかの助けが必要です。オーバーライドされたメソッドを使用するJava

私はこの抽象クラスにプライベート変数を設定しました。私はまた、getThing()という名前のメソッドを返します。

私はその抽象クラスを継承するクラスを持っています。また、プライベート変数と、抽象クラスから値を取得するためにオリジナルをオーバーライドするメソッドもあります。

両方の値にアクセスできる唯一の方法は、getSuperThingというサブクラスに2番目のメソッドを作成し、それにsuperを使用する方法です。さて、私は好奇心を避けるために、objectNae.super.getThing()のようなやり方で抽象クラスのメソッドにアクセスできるようにする簡単な方法があれば疑問に思っていました。

おかげ;)

+0

郵便番号をご記入ください – andersoj

答えて

3

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

サブクラスから変数に直接アクセスできるようにするには(アクセサーメソッドを使用せずに)、代わりにprotectedにします。ここにはControlling Access to Members of a Classに関する文書があります。

+0

ありがとう、たくさんの男、まだ保護については知らなかった。 –

1

私があなたの質問を正しく理解していれば、具体的なサブクラスの抽象クラスのメソッドをオーバーライドしないでください。抽象クラスから返されたものとは異なる値を返す必要がある場合(そして、それが不適切な設計を示唆している場合を除き)、必要はありません。

ではなく、抽象クラスのメソッドがサブクラスのメソッドとしてアクセス可能になります。だから、

、あなたが持っている場合:

public abstract class AbstractClass { 
    private int value = 3; 

    public int getValue() { 
    return value; 
    } 
} 

public class ConcreteClass extends AbstractClass { 
} 

、あなたが行うことができるはず:

new ConcreteClass().getValue() 
0

私はあなたがsuper.getThing(呼び出し以外の方法を持っていないと思う)でサブクラスのgetThing()メソッドまたはgetSuperThing()メソッド抽象クラスは、使用する前にサブクラス化しなければなりません。

関連する問題