2010-04-14 76 views
3

问题是为什么决定将变量作为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!");  
     } 
} 

回答

5

正如我所看到的,接口声明了一组实现者必须拥有的能力。它指的是“什么”而不是“如何”;它比实施指南更多地是一个规范。

因此,不公开的方法在界面中是不相关的。与非静态数据成员相同,这与成员的具体实现更相关。

0

我认为接口中不允许非静态变量主要是为了实用的原因。多重继承可以以这种方式更高效,并且避免了一些模棱两可的问题。

顾名思义,接口只是一个实例上可用操作的定义,因此它不包含任何方法实现。

由于这些原因,允许方法不公开而变量不是静态的是没有意义的。

这就是说,我不确定接口的默认值是不是类的好主意。

1

至于为什么他们是他们的默认值 - 这只是语言规范。他们设计的就是这样。

它们不允许在接口中使用静态方法,因为接口不具备任何功能。这只是界面的定义。

由于接口不包含代码,Java没有钻石问题。如果你的接口被允许有代码,那么Java将无法确定它是否应该调用testInt的testMethod()或testInt1的testMethod()。由于接口没有代码,因此Java知道testMethod只有1个实现需要运行代码。

相关问题