Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接口的成员变量必须是final。。。为什么?_Java_Interface_Static_Final - Fatal编程技术网

Java 接口的成员变量必须是final。。。为什么?

Java 接口的成员变量必须是final。。。为什么?,java,interface,static,final,Java,Interface,Static,Final,我脑子里有个问题,为什么接口中的成员变量不能是非常量。。静态的逻辑就在我的脑海中,如果一个人需要访问接口的变量,那么它必须是静态的,因为我们不能创建接口的实例,但是为什么需要final呢??下面的代码显示了如何使接口成员变量成为静态最终变量,即使我们默认情况下没有提到它 interface inter{ int a=10; // It becomes final static by default public void interFunc(); } clas

我脑子里有个问题,为什么接口中的成员变量不能是非常量。。静态的逻辑就在我的脑海中,如果一个人需要访问接口的变量,那么它必须是静态的,因为我们不能创建接口的实例,但是为什么需要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();      
           }
}

提前感谢

对于一个成员变量,我认为它必须是静态的,因为不能为接口创建对象,所以要访问成员变量,需要让它是静态的,并通过类访问它。

接口变量是静态的,因为Java接口本身无法实例化;变量的值必须在不存在实例的静态上下文中赋值。最后一个修饰符确保分配给接口变量的值是不能由程序代码重新分配的真常量。
请记住,接口用于显示您必须实现的内容,而不是如何实现。因此变量应该是最终的(因为非静态变量与类的整个规范无关)。

默认情况下,Java成员变量必须是最终的,因为接口不应该被实例化。默认情况下,它们也是静态的。因此,您不能更改它们的值,也不能在分配后重新分配它们。
界面上的一些东西。希望有帮助。

接口不是一个类,它是一组规则,不能实例化,那么它里面就不能包含任何易失性数据容器。只能在接口内部设置常量,但不鼓励这样做,因为在接口中声明常量。

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是静态的而不是最终的

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();
    }
}

的副本,请包含指向报价来源的链接。另外,标记
>stuff
可以用来引用“stuff”。好的。。好的,谢谢你,朋友。。这是一个很好的解释,在这里清除了一些网络…:)与这个问题无关,但我看不出接口(共享知识)中声明的常量如何违反封装。除非提供接口也违反了封装。但是,所有这些都在链接中进行了解释:根据需要在接口中声明尽可能多的变量-只需使用
静态导入
,而不是实现/扩展它。