10. 接口与抽象类

233 阅读1分钟

想要做一个一定要被覆盖的方法,有两种实现,一种是主动抛出异常,另外一个就是抽象化。

public abstract class cook{
    public abstract void do(); // 抽象方法必须存在于抽象类中。
}

抽象类有几个特点:

  1. 不可实例化
  2. 可以包含抽象方法,非private/static。
  3. 可以包含成员变量,可以有构造器。
  4. 可以实例化的东西他的所有方法体一定是全的。 在继承抽象类的时候,其中的抽象方法如果没有被覆盖,会报错。将一个类下面的所有方法体都去掉,那么就变成了接口interface。抽象类还是一个类,表明了它是什么,而interface是功能,表明他能做什么,同样的是他们都不提供具体实现。

一个Java的类文件,必须只能包含一个和他同名public成员我,非public成员可以有多个。

继承一个类的时候不想实现所有的方法,那么可以继续把他声明成抽象类。

接口方法默认都是public的,接口中的成员只能是public static final的。

接口:

  1. 接口实现了部分的多继承。
  2. 接口不是类。
  3. 接口代表一种功能。
  4. 一个类只能有一个父类,但是可以实现若干的接口。

接口一旦被被发布,就不能添加新的方法,因为继承接口时所有的方法都要被实现,否则会报错。

List接口在设计之初没有实现sort方法,现在想要添加这个方法,于是在Java8引入了default。这相当于变相的引入了多根继承,因为多个interface中可能包含同名方法。