7

インターフェイスのメンバー変数を非定数にすることができないのはなぜですか..静的であるというロジックは、インターフェイスの変数にアクセスする必要がある場合は、それが必要であるという私の心の中にありました。インターフェイスのインスタンスを作成できないため、静的にする必要がありますが、なぜ最終的な必要性が生じるのですか?? 以下のコードは、デフォルトでは言及していませんが、インターフェースメンバー変数がどのように static final になるかを示しています....

interface inter{

       int a=10; // It becomes final static by default

       public void interFunc();
} 

class cls implements inter{

       public void interFunc(){

           System.out.println("In Class Method WITH a's Value as --> "+a);
       }
}

class Test{

       public static void main(String[] args){

           inter in= new cls();

           in.interFunc();      
           }
}

前もって感謝します !!!

4

5 に答える 5

13

インターフェイスはクラスではなく、一連のルールであり、インスタンス化できないため、内部に揮発性データ コンテナーを含めることはできません。インターフェイス内で定数のみを設定できますが、インターフェイスで定数を宣言することはカプセル化のアプローチに違反するため、お勧めできません。

于 2012-08-16T05:37:06.210 に答える
4

メンバー変数の場合、インターフェイス用にオブジェクトを作成できないため、静的にする必要があると思います。メンバー変数にアクセスするには、静的にし、クラスを介してアクセスする必要があります。

于 2012-08-16T05:29:43.333 に答える
0

Java インターフェースはそれ自体ではインスタンス化できないため、インターフェース変数は静的です。変数の値は、インスタンスが存在しない静的コンテキストで割り当てる必要があります。final 修飾子は、インターフェイス変数に割り当てられた値が、プログラム コードによって再割り当てできない真の定数であることを保証します。インターフェースは、実装方法ではなく「何」を実装する必要があるかを示すために使用されることに注意してください。そのため、変数は final である必要があります (非静的変数はクラスの仕様全体に関連していないため)。

于 2012-08-16T05:30:39.013 に答える
0

インターフェースはインスタンス化されることが想定されていないため、Java メンバー変数はデフォルトで final でなければなりません。また、デフォルトでは静的です。したがって、それらの値を変更することはできず、一度割り当てられると再割り当てすることもできません。これはインターフェース に関するものです。それが役に立てば幸い。

于 2012-08-16T05:35:48.777 に答える
0

Java-多重継承を実装していませんが、インターフェイスによって実現できます。

interface i1{  
    int a=1;  
}  

interface i2{  
    int a=2;  
}  

class exampleInterface implements i1,i2{  
    public static void main(String...a){  

        //As interface members are static we can write like this
        //If its not static then we'll write sysout(a) ... which gives ambiguity error.
        //That's why it is static.

        System.out.println(i2.a); 
    }  
}  

これは静的であるため、最終的ではない場合、それを実装するクラスは値を変更し、インターフェイスを実装している他のクラスは変更された値を受け取るため、最終的である必要があります。以下の例のように、クラス x が r を static ではなく final として持っている場合。

class x{
    static int r=10;
}

class y extends x{
    static void fun(){
        x.r=20;
        System.out.println(x.r);
    }
}

class m extends x{
    void fun(){
        System.out.println(x.r);
    }
}

public class Test{
    public static void main(String[] args) {

        y.fun();
        m obj=new m();
        obj.fun();
    }
}
于 2014-11-07T07:37:07.153 に答える