[英]interface variables are final and static by default and methods are public and abstract
问题是为什么在默认情况下决定将变量作为final和static以及方法作为public和abstract。
是否有任何特殊原因使它们成为隐式,变量为final和static,方法为public和abstract。
为什么他们不允许静态方法但允许静态变量?
我们在Java中具有多重继承功能的接口,以避免钻石问题。 但它如何解决钻石问题,因为它不允许静态方法。
在下面的程序中,两个接口都有相同名称的方法..但实现只有一个我们实现...这是钻石问题的解决方法吗?
interface testInt {
int m = 0;
void testMethod();
}
interface testInt1 {
int m = 10;
void testMethod();
}
public class interfaceCheck implements testInt, testInt1{
public void testMethod() {
System . out . println ( "m is"+ testInt.m );
System . out . println ( "Hi World!" );
}
}
在我看来,一个接口声明了一组实现者必须具备的能力。 它指的是“什么”而不是“如何”; 它更像是一个规范,而不是一个实现指南。
因此,非公开的方法在接口中是无关紧要的。 与非静态数据成员相同,后者与特定实现更相关。
至于为什么它们是默认值 - 它只是语言规范。 他们设计的就是这样。
它们不允许接口中的静态方法,因为接口不具有任何功能。 这只是界面的定义。
Java没有菱形问题,因为接口不包含代码。 如果允许你的接口有代码,那么Java将无法确定它是否应该调用testInt的testMethod()或testInt1的testMethod()。 由于接口没有代码,Java知道testMethod只有一个实现,它需要运行代码。
我认为接口中不允许使用非静态变量,主要是出于语用原因。 通过这种方式可以更有效地进行多重继承,并避免了一些歧义问题。
顾名思义,接口只是实例上可用操作的定义,因此,它不包含任何方法实现。
由于这些原因,允许方法不公开,变量不是静态的,这没有任何意义。
也就是说,我不确定接口的默认值是什么,而不是类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.