我知道接口变量总是静态的,因为我们不能创建接口的对象。但为什么抽象类变量总是不是静态的呢?我们也不能制作抽象类的对象
答案 0 :(得分:0)
这是因为抽象类的字段然后由所有子类继承并且可以由它们使用。因此,您可以在抽象类中实现处理与此类字段相关的逻辑的方法。您可以将抽象类视为部分完成的实现;因为它是部分完成的,所以在子类完成之前不能构造它。
答案 1 :(得分:0)
全部由implements
与extends
关键字解释:您实现接口的功能但扩展 (可能是抽象的)类的能力。
当您扩展时,您将继承实例中的所有字段和方法。 一旦扩展它就有抽象类的实例:你正在为它添加/更改功能,而接口只是一个空壳,你必须用行为“填写”。
答案 2 :(得分:0)
接口和抽象类之间的主要区别在于 - 接口只是契约,它们用于指定随后具体实现的方法的签名必须有,并且接口中的所有方法都是隐式abstract
。
相比之下,抽象类是类,它们可以使用默认实现的非抽象方法。
引自JLS for the definition of an interface:
接口声明引入了一个新的引用类型,其成员是类,接口,常量和抽象方法。这种类型没有实现,但是其他不相关的类可以通过为其抽象方法提供实现来实现它。
和the definition of an abtract class:
抽象类是一个不完整或被认为不完整的类。
虽然接口除了指定实现它们的类的模式之外什么都不做,但是抽象类可以做更多 - 你可以定义它们的行为 - 因此你实际上可以提供它们的方法的具体实现以及定义它们的状态(即实例变量)。