问题是,为什么默认情况下决定将变量作为final和static,将方法作为公共和抽象。
有没有什么特别的理由让它们隐含,变量作为最终的和静态的,方法作为公共的和抽象的。
为什么他们不允许静态方法,而允许静态变量?
我们的接口使得Java具有多重继承的特性,并且避免了菱形问题。但它如何解决菱形问题,因为它不允许静态方法。
在下面的程序中,两个接口都有具有相同name..but的方法,而只实现了一个我们implement...is这个菱形问题是如何解决的?
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!" );
}
}发布于 2010-04-14 16:40:14
在我看来,接口声明了实现者必须具备的一组能力。它更多的是指“什么”而不是“如何”;它更多的是一种规范而不是一种实现指南。
因此,非公共的方法在接口中是不相关的。非静态数据成员也是如此,非静态数据成员更多地与具体实现相关。
发布于 2010-04-14 16:42:19
至于为什么它们是它们的默认值--这只是语言规范。他们把它设计成这样,所以它是这样的。
他们不允许在接口中使用静态方法,因为接口不应该有任何功能。这只是一个接口的定义。
Java不存在菱形问题,因为接口不包含代码。如果你的接口被允许有代码,那么Java就不能决定它应该调用testInt的testMethod()还是testInt1的testMethod()。由于接口没有代码,Java知道只有1个testMethod实现需要运行代码。
发布于 2010-04-14 16:39:02
我认为非静态变量在接口中是不允许的,主要是出于实用的原因。通过这种方式,多重继承可以更有效,并且避免了一些歧义问题。
顾名思义,接口只是实例上可用操作的定义,因此,它不包含任何方法实现。
由于这些原因,允许方法不是公共的,变量不是静态的是没有任何意义的。
也就是说,我不确定为接口和类设置不同的默认值是不是一个好主意。
https://stackoverflow.com/questions/2635807
复制相似问题