- 抽象类:
(1)含义:在继承的层次结构中,每个新的子类都使类变得更加明确和具体。如果一个子类向父类追溯,类就会变得更通用、更加不明确。一个设计抽象、没有任何具体实例的父类称为抽象类
(2)定义:在类的头部使用abstract修饰符表示该类为抽象类。
例:public abstract class ClassName
(3)抽象方法:
通过abstract关键字将方法修饰为抽象方法。
抽象方法是出现在基类中的一种方法,但要求在派生类中被重写
一个抽象方法只有方法头,没有方法主体
抽象方法格式:
访问修饰符 abstract 返回类型 方法名(参数列表);
一个包含抽象方法的类会自动变成抽象类。
抽象类不能使用new 操作符来创建它的实例。抽象方法只有定义而没有实现,它的实现由子类提供。
(4)说明:
- 抽象方法不能包含在非抽象类中。如果抽象父类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象的。还需要注意到,抽象方法是非静态的。
- 抽象类不能使用new操作符来初始化。但是,仍然可以定义它的构造方法,这个构造方法在它的子类的构造方法中调用。
- 包含抽象方法的类必须是抽象的。然而,可以定义一个不包含抽象方法的抽象类。这个抽象类作用于作为定义新子类的基类。
- 子类可以重写父类的方法并将它定义为抽象的。
- 即使子类的父类是具体的,这个子类也可以是抽象的。
- 不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。
2.接口:接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关类的对象的共同行为。
(1)定义:
接口定义的通用格式:
public interface InterfaceName {
(方法头.. ..)
}
(2)说明:
- 接口中所有的方法都是public,抽象方法。
- 一个类可以实现一个或者多个接口。
- Java中,接口被看作一种特殊的类。
- 与抽象类相似,不能使用new操作符来创建接口的实例。
3.抽象类与接口的区别:
接口的使用和抽象类的使用基本类似,但是,定义一个接口和定义一个抽象类有所不同。
Java 只允许为类的继承做单一继承,但是允许使用接口做多重继承。
例:
public class NewClass extends BaseClass
implements Interface1, ... , InterfaceN {
...
}
利用关键字extends,接口可以继承其他接口。这样的接口称为子接口(subinterface)。
例如:NewInterface 是 Interface1,…, InterfaceN 的接口。
public interface NewInterface extends Interface1,...,InterfaceN{
// constants and abstract methods
}
接口可以继承其他接口但不能继承类。一个类可以继承它的父类同时实现多个接口。
所有的类共享同一个根类Object,但是接口没有共同的根。与类相似,接口也可以定义一种类型。一个接口类型的变量可以引用任何实现该接口的类的实例。如果一个类实现了一个接口,那么这个接口就类似于该类的一个父类。可以将接口当作一种数据类型使用,将接口类型的变量转换为它的子类,反过来也可以。
参考文献:
梁勇. Java语言程序设计与数据结构基础篇[M]. 北京:机械工业出版社,2018.167-175