我心中有一个问题,为什么不能成为接口中的成员变量是一个非常数..静态的逻辑在我的脑海中是正确的,如果需要访问接口的变量那么它必须是静态的,因为我们不能创建接口的实例,但为什么需要最终产生?下面的代码显示了接口成员变量如何成为静态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();
}
}
提前致谢!!!
答案 0 :(得分:12)
接口不是一个类,它是一组规则,并且无法实例化,那么它就不能包含任何volatile数据容器。只能在接口内设置常量,尽管不鼓励,因为在接口violates encapsulation approach中声明常量。
答案 1 :(得分:4)
对于成员变量,我认为必须是静态的,因为无法为接口创建对象,因此要访问成员变量,需要将其静态化并通过类访问它。
答案 2 :(得分:0)
接口变量是静态的,因为Java接口本身无法实例化;必须在没有实例的静态上下文中分配变量的值。最终修饰符确保分配给接口变量的值是一个真正的常量,不能由程序代码重新赋值。 并且请记住,界面用于显示您将要执行什么,而不是如何实现。所以变量应该是final(因为非静态变量与类的整个规范无关)。
答案 3 :(得分:0)
默认情况下,Java成员变量必须是final,因为接口不应该被实例化。它们默认也是静态的。因此,您无法更改其值,也无法在分配后重新分配它们。 Here's 接口上的东西。希望它有所帮助。
答案 4 :(得分: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为静态而不是最终的。
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();
}
}