关于java doc中抽象vs接口的令人费解的解释

时间:2010-12-07 19:37:20

标签: java interface static

在java文档中,有人说:

  

与接口,抽象类不同   可以包含的字段   静态和最终,它们可以包含   实施方法。

这是正确的文字吗? 部分让我感到困惑,因为接口没有staticfinal字段,对吗?

来源:http://download.oracle.com/javase/tutorial/java/IandI/abstract.html

感谢。

修改:

public interface GroupedInterface extends Interface1,
                                        Interface2, Interface3 {

   // constant declarations
   double E = 2.718282;  // base of natural logarithms

   // method signatures
   void doSomething (int i, double x);
   int doSomethingElse(String s);

}
  

接口可以包含常量   除方法之外的声明   声明。所有常数值   在接口中定义的是隐含的   公共,静态和最终。再来一次,   这些修饰语可以省略。

6 个答案:

答案 0 :(得分:3)

  

正文中的每个字段声明   界面是隐式公开的,   静态的,最后的。允许   冗余地指定任何或全部   这些领域的修饰语。

来自Java语言规范(here

的第9.3节

答案 1 :(得分:2)

点击问题链接中的“Defining an Interface”:

  

接口可以包含常量   除方法之外的声明   声明。所有常数值   在接口中定义的是隐含的   公共,静态和最终。再来一次,   这些修饰语可以省略。

答案 2 :(得分:2)

这是正确的文字。

界面中的所有字段都被推断为public,static和final,无论是否明确声明。正如所有方法都是公开的和抽象的一样,无论是否如此声明。

答案 3 :(得分:1)

报价是正确的。接口可以具有静态最终字段,但不能具有任何其他组合(非静态或非最终)。

默认情况下,接口上的字段是静态的和最终的,添加修饰符不是必需的,因为没有替代方法。

对于抽象类,赋予它可变状态是有意义的,请参阅java.util.AbstractList。接口不允许任何成员在实现它的类上赋予可变状态。

答案 4 :(得分:1)

思考是..界面内的所有字段都是静态的和最终的,即使你没有写静态和最终的!

答案 5 :(得分:1)

文档是正确的。接口可能包含要用作常量的静态最终字段。抽象类可以包含要通过扩展类继承的实例变量。然后,这些变量可以在扩展类的实例中使用。