1.抽象类
语法:
[修饰符列表] abstract class 类名{
方法体;
}
- 说明:类与类之间有共同特征,将这些具有共同特征的类再进一步抽象形成了抽象类,由于类本身是不存在的,所以抽象类无法创建对象。
- 抽象类属于引用数据类型。
- 抽象类无法被实例化,无法创建对象,只能继承。
- final和abstract不能连用,对立的。
- 抽象类有构造方法,其构造方法是给子类使用的。
- 抽象类不一定有抽象方法,抽象方法一定要出现在抽象类中。
- 一个非抽象的类继承抽象类,必须将抽象类的抽象方法实现了,否则编译器报错。
- 抽象方法:没有方法体,以分号结尾,有abstract修饰。
- 面向抽象编程,降低程序的耦合度,提高程序的扩展力
2.接口
语法:
[修饰符列表] interface 接口名{
}
- 接口也是一种引用数据类型。编译之后也是一个class字节码文件。
- 接口支持多继承,一个接口可以继承多个接口。
- 接口中只包含:1.常量。2.抽象方法
- 接口中的方法默认是 public abstract的,可以省略不写(最好写上)。
- 接口中的的方法都是抽象方法,所以不能有方法体。
- 当一个非抽象类实现接口的时候,必须将接口中所有的抽象方法全部实现。
- 接口中也能实现多态,例如:
Animal a = new cat(); // a是接口,cat是实现a接口的类
。
当调用 a.move的时候,编译时期move会与a绑定, 在运行时期,调用的是cat的move方法。 - 接口之间实现强制类型转换的时候,没有继承关系也可以强转。
接口在开发中的作用:
- 面向接口编程。类似于usb,可以在电脑上接上使用,降低耦合度,提高扩展性。
- 接口的使用离不开多态机制。
- 接口可以解开实现者和调用者的耦合,调用者面向接口调用,实现者面向接口编写实现。
- 在开发项目中,通常是将项目分成许多模块,模块之间用接口衔接。
抽象类和接口的区别:
-
- 抽象类是半抽象的
接口是完全抽象的。
- 抽象类是半抽象的
-
- 抽象类有构造方法。
接口中没有构造方法。
- 抽象类有构造方法。
-
- 类和类之间只能单继承。
接口间支持多继承。
- 类和类之间只能单继承。
-
- 一个抽象类只能继承一个类(单继承)
一个类可以同时实现多个接口。
- 一个抽象类只能继承一个类(单继承)
类与类之间的关系:
- 1.is a:Cat is a Animal。 能满足is a表示的都是继承关系。
Cat extends Animal
- 2.has a:I has a pen。 能满足has a 关系的表示关联关系,以属性存在。
I {
Pen pen;
}
- 3.like a:能满足like a关系的表示实现关系,类实现接口。 A implements B