繁体   English   中英

抽象类和接口将要发生的变化

[英]abstract class and interface what will be change

我们有一个抽象类Parent ,以及另外两个类: class ChildOneChildtwo class ChildOne ,它们都从Parent继承。

问题:如果我们将Parent声明为接口,那么当ChildOneChildTwo都实现此接口时,会发生什么或更改?

  1. 语法,这些类将需要implements Parent而不是extends Parent

  2. 在Java 7或ChildOne ,接口不能包含方法实现,因此您需要在ChildOneChildTwo重写它们。 (从Java8开始,您可以在接口中编写默认方法的实现)。

  3. 由于接口不能保存属性,因此您还需要在ChildOneChildTwo复制它们。

如果将抽象类转换为接口,则需要

  • 实现接口而不是扩展类
  • 不调用super()构造函数。
  • 不调用任何超级方法。
  • 公开接口中的任何方法重写/实现方法。 抽象类中的方法不必是公共的。

假设您的定义是,当您说拒绝“如果我们拒绝将Parent作为接口”时,更改应如下。 1.您应放弃用父类编写的功能。 2.无论您要在接口中定义任何抽象函数(替换Parent),都必须为Children编写不同的独立实现。

当将Parent作为抽象类时, ChildOneChildTwo将继承Parent定义的非抽象方法。 这意味着,默认情况下, ChildOneChildTwo将获得Parent的某些功能。 ChildOneChildTwo具有某些通用功能(可以放在Parent时,此功能特别有用。

当将Parent作为接口时, ChildOneChildTwo将需要实现Parent中的所有方法。

当两者都实现此接口时, ChildOneChildTwo会发生什么或改变

这些都不会发生-它们只能扩展一些不同的类(因为在Java中,一个类只能扩展一个类,但是可以实现许多接口)。 因此,如果可能的话,最好将Parent声明为接口而不是抽象类。

如果您在Parent中定义了某些字段,构造函数或非抽象方法,则当然不可能将Parent从抽象类更改为接口。 请记住,接口只能容纳抽象方法声明-没有字段,方法实现或构造函数声明(除非我们谈论的是静态字段/方法,但是当我们谈论继承时,这些都不成问题)。

暂无
暂无

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

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