想要做一个一定要被覆盖的方法,有两种实现,一种是主动抛出异常,另外一个就是抽象化。
public abstract class cook{
public abstract void do(); // 抽象方法必须存在于抽象类中。
}
抽象类有几个特点:
- 不可实例化
- 可以包含抽象方法,非private/static。
- 可以包含成员变量,可以有构造器。
- 可以实例化的东西他的所有方法体一定是全的。 在继承抽象类的时候,其中的抽象方法如果没有被覆盖,会报错。将一个类下面的所有方法体都去掉,那么就变成了接口interface。抽象类还是一个类,表明了它是什么,而interface是功能,表明他能做什么,同样的是他们都不提供具体实现。
一个Java的类文件,必须只能包含一个和他同名public成员我,非public成员可以有多个。
继承一个类的时候不想实现所有的方法,那么可以继续把他声明成抽象类。
接口方法默认都是public的,接口中的成员只能是public static final的。
接口:
- 接口实现了部分的多继承。
- 接口不是类。
- 接口代表一种功能。
- 一个类只能有一个父类,但是可以实现若干的接口。
接口一旦被被发布,就不能添加新的方法,因为继承接口时所有的方法都要被实现,否则会报错。
List接口在设计之初没有实现sort方法,现在想要添加这个方法,于是在Java8引入了default。这相当于变相的引入了多根继承,因为多个interface中可能包含同名方法。