[英]Puzzling explanation on abstraction vs interface in java doc
在java文档中,有人说:
与接口不同,抽象类可以包含非静态和最终的字段,并且它们可以包含已实现的方法。
这是正确的文字吗? 这不属于混淆了我,因为接口没有static
或final
域,对不对?
资料来源: 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);
}
除了方法声明之外,接口还可以包含常量声明。 接口中定义的所有常量值都是隐式public,static和final。 再一次,可以省略这些修饰符。
接口主体中的每个字段声明都是隐式的public,static和final。 允许为这些字段冗余地指定任何或所有这些修饰符。
来自Java语言规范的9.3节( 这里 )
点击问题链接中的“ 定义界面 ”:
除了方法声明之外,接口还可以包含常量声明。 接口中定义的所有常量值都是隐式public,static和final。 再一次,可以省略这些修饰符。
这是正确的文字。
无论是否明确声明,接口中的所有字段都被推断为public,static和final。 正如所有方法都是公开的和抽象的一样,无论是否如此声明。
报价是正确的。 接口可以具有静态最终字段,但不能具有任何其他组合(非静态或非最终)。
默认情况下,接口上的字段是静态的和最终的,添加修饰符不是必需的,因为没有其他选择。
对于抽象类,赋予它可变状态是有意义的,请参阅java.util.AbstractList。 接口不允许任何成员在实现它的类上赋予可变状态。
思考是..界面内的所有字段都是静态的和最终的,即使你没有写静态和最终!
文档是正确的。 接口可能包含要用作常量的静态最终字段。 抽象类可以包含要通过扩展类继承的实例变量。 然后,这些变量在扩展类的实例中可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.