抽象类和接口会有什么变化

时间:2014-04-24 16:10:04

标签: java interface abstract-class

我们有一个抽象类Parent和另外两个类:class ChildOneChildtwo,都来自Parent

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

5 个答案:

答案 0 :(得分:1)

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

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

  3. 由于界面无法保存属性,因此您还需要在ChildOneChildTwo中复制它们。

答案 1 :(得分:0)

如果将抽象类转换为界面,则需要

  • 实现界面而不是扩展类
  • 不要调用super()构造函数。
  • 不要叫任何超级方法。
  • 使接口public中的任何方法覆盖/实现方法。抽象类中的方法不必公开。

答案 2 :(得分:0)

假设你的意思是定义,当你说“如果我们拒绝作为一个接口的父母”,那么改变应该如下。 1.您应该放弃在父类中编写的功能。 2.无论您在接口中定义哪些抽象函数(替换Parent),您都必须为Children编写不同的独立实现。

答案 3 :(得分:0)

当您将Parent作为抽象类时,ChildOneChildTwo将继承Parent中定义的非抽象方法。这意味着,ChildOneChildTwo默认会从Parent获得一些功能。当ChildOneChildTwo具有一些常用功能时,这会非常有用,可以放在Parent中。

当您将Parent作为界面时,ChildOneChildTwo需要实现Parent中的所有方法。

答案 4 :(得分:0)

  

两者都会在ChildOneChildTwo发生或发生变化   实现这个接口

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

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