繁体   English   中英

为什么接口变量总是静态的,为什么抽象类不是始终静态的?

[英]why interface variables are always static and why not abstract class are always static?

我知道接口变量始终是静态的,因为我们不能使接口成为对象。 但是为什么不抽象类变量总是静态的呢? 我们也不能成为抽象类的对象

这是因为抽象类的字段随后被所有子类继承,并且可以被它们使用。 因此,您可以在抽象类中实现处理与此类字段相关的逻辑的方法。 您可以将抽象类视为部分完成的实现。 因为它是部分完成的,所以不能在子类完成之前对其进行构造。

这是全部由解释implementsextends关键字:你实现一个接口的功能但延伸的(潜在的抽象)类的能力。

扩展时 ,您将在实例中继承其所有字段和方法。 扩展抽象类后,您就拥有了它的实例:正在为其添加/更改功能,而接口只是一个空壳,您必须“填充”行为。

接口和抽象类之间的主要区别在于- 接口只是契约 ,它们用于指定其后续具体实现必须具有的方法的签名 ,并且接口中的所有方法都是隐式abstract

相反, 抽象类是class ,它们可以具有默认实现的非抽象方法。

JLS所引用的接口定义

接口声明引入了新的引用类型,其成员是类,接口,常量和抽象方法。 此类型没有实现,但是其他不相关的类可以通过为其抽象方法提供实现来实现它。

以及抽象类的定义

抽象类是不完整的类,或者被认为是不完整的类。

尽管接口除了指定实现它们的类的模式外没有做任何事情,但是抽象类可以做更多的事情-您可以定义它们的行为-因此,您实际上可以提供其方法的具体实现以及定义其状态(即实例变量) 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM