Java 抽象类与接口笔记
一、抽象类
包含抽象方法的类
1、说明:
(1)方法只有声明没有实现内容时,该方法可以定义成抽象方法,使用abstract修饰,方法不需要写方法体{},直接分号“;”结束就行。抽象方法必须定义在抽象类中,该类也必须被abstract修饰。
(2)抽象类不可以被实例化。
(3)抽象类的子类覆盖了所有的抽象方法后,该子类才能实例化。
否则,这个子类还是抽象类。
注意:
【注意1】抽象abstract关键字不可以和哪些关键字共存?
private 不行(子类无法重写)
static 不行(类名调用没有内容)
final 不行(final方法不能被重写)
【注意2】抽象类和一般类的异同点
相同点:
抽象类和一般类都是用来描述事物的,都在内部定义了成员。
不同点:
(1)一般类中不能定义抽象方法,只能定义非抽象方法;
抽象类中可以定义抽象方法,也可以定义非抽象方法。
(2)一般类可以被实例化;抽象类不可以被实例化。
二、接口
当一个抽象类中所有的方法都是抽象方法时,我们可以将该抽象类用另一种形式定义和表示,就是接口interface。
1、对于接口当中常见的成员:这些成员都有固定的修饰符
(1)全局常量:public static final
(2)抽象方法:public abstract
说明:
(1)类与类之间是继承关系,类与接口之间是实现关系。
(2)接口不可以实例化。只能由实现了接口的子类,并重写了接口中所有的抽象方法后,该子类才可以实例化。否则,这个子类就是一个抽象类。
2、怎么使用接口呢?----实现,使用implements关键字
(1)Java中类不支持多继承,但一个类可以实现多个接口。
(2)一个类在继承另一个类的同时,还可以实现多个接口。
说明:
子类在实现接口的方法时,要把方法修饰成public的,因为接口在定义时,方法默认是public,即使没有显式的写出来。
三、接口和抽象类异同点
相同点:
都是不断向上抽取而来的。
不同点:
(1)抽象类需要被继承,而且只能单继承;接口需要被实现,而且可以多实现。
(2)抽象类中可以定义抽象方法,也可以定义非抽象方法,子类在继承抽象类后,可以直接使用其中的非抽象方法;
接口中只能定义抽象方法,必须由子类去实现。
(3)抽象类的继承,是在定义该体系中的基本共性内容;
接口的实现,是在定义体系的额外功能。