问题在于,为什么决定将变量作为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!" );
}
}
答案 0 :(得分:5)
正如我所看到的,界面声明了一组实现者必须具备的能力。它指的是“什么”而不是“如何”;它更像是一个规范,而不是一个实现指南。
因此,非公开的方法在接口中是无关紧要的。与非静态数据成员相同,后者与特定实现更相关。
答案 1 :(得分:2)
至于为什么它们是默认值 - 它只是语言规范。他们设计的就是这样。
它们不允许在接口中使用静态方法,因为接口不具有任何功能。这只是界面的定义。
Java没有钻石问题,因为接口不包含代码。如果允许你的接口有代码,那么Java将无法确定它是否应该调用testInt的testMethod()或testInt1的testMethod()。由于接口没有代码,Java知道testMethod只有一个实现,需要运行它。
答案 2 :(得分:0)
我认为接口中不允许使用非静态变量,主要是出于语用原因。多重继承可以通过这种方式提高效率,避免了一些歧义问题。
顾名思义,接口只是实例上可用操作的定义,因此,它不包含任何方法实现。
由于这些原因,允许方法不公开,变量不是静态的,没有任何意义。
那就是说,我不确定接口的默认值是否与类不同。