1

私はこのような抽象クラスとインターフェースを持っています

abstract class ParentClass
{
    int VALUE;
    public abstract void display();
    public void display2()
    {
        System.out.println("this is abstract class method");
    }
}

interface parentInterface
{
    int VALUE=88;
    abstract void display();
    void display2();
}

子クラスは、次のように上記を拡張および実装します

class ChildClass extends ParentClass implements parentInterface
{

    ChildClass()
    {
        super.VALUE=0;
        //VALUE=0;     //<=will give ambiguous property
    }
    @Override
    public void display() 
    {
        System.out.println("Current Class-"+this.getClass());
        System.out.println("Integer value-"+super.VALUE);
    }
    public void display2()
    {
        //to call the method of abstract class 
        //call by using super.display2();
        System.out.println("this is implemented method");
    }
}

だから、私の質問はVALUE、ChildClassのインターフェイス変数にアクセスするにはどうすればよいですか?

4

2 に答える 2

2

インターフェイスの変数はデフォルトVALUEであるため、を使用してfromインターフェイスにアクセスできます。parentInterface.VALUEpublic static final

また、抽象クラスはメンバー変数であるため、VALUEを使用してアクセスできます。this.VALUE

于 2013-01-02T07:21:33.887 に答える
2

インターフェイスの変数は暗黙的にpublic static finalです。

static-インターフェイスはインスタンスを持つことができないため。

final-インターフェイス変数に割り当てられた値は、プログラムコードで再割り当てできない真の定数です。

インターフェイス変数にはを使用してアクセスできますが<Interface>.VALUE、親クラスの変数は継承されるため、を使用してアクセスできますthis.VALUE

サブクラスクラスがインスタンスメンバーを持つインターフェイスを実装していて、サブクラスとインターフェイスの両方が同じパッケージに含まれている場合、インターフェイス名を使用しなくても、子クラスからその静的メンバーにアクセスできます。

そのため、あいまいなエラーが発生します。インターフェイスを他のパッケージに入れてください。そうすれば、そのようなエラーは表示されないはずです。そうしないと、次のようにアクセスする必要があります。super.VALUE

于 2013-01-02T07:43:14.607 に答える