一、基础语法
1、接口也是一种引用数据类型,编译之后也是一个class字节码文件
2、接口是完全抽象的(抽象类是半抽象的)
3、接口的定义
[修饰符列表] interface 接口名{
}
4、接口支持多继承,一个接口可以继承多个接口
interface C extends A, B{
}
5、接口中只包含两部分内容,一部分是常量,一部分是抽象方法。除此之外,接口中没有其他内容了
6、接口中所有的元素都是public修饰的(都是公开的)
7、接口中的抽象方法定义时,public abstract可以省略
8、接口中的常量的public static final可以省略
9、接口中的方法不可以带有方法体(不带有大括号)
10、类和类之间叫做继承,类和接口之间叫做“实现”。但仍可以将“实现”看做“继承”。
实现用implements关键字完成。
11、实现的时候需要将接口中的抽象方法进行重写,并且加上public
12、一个类可以实现多个接口。这种机制弥补了类和类之间仅支持单继承。实际上单继承是为了简单而出现,现实世界中存在多继承,Java中的接口弥补了单继承带来的缺陷
13、当继承和实现都存在的时候,extends在前,implements在后
public class Test{
public static void main(String[] args){
Flyable f = new Cat();
f.fly();
}
}
class Cat extends Animal implements Flyable{
//能插拔的叫做接口
//给猫插上了翅膀实现了飞翔
}
二、接口在开发中的作用
1、接口在开发中的作用类似多态的作用
多态:面向抽象编程,不要面向具体编程,降低程序的耦合度,从而提高了程序的扩展力
public class Master{
public void feed(Animal a){
/*面向Animal父类编程,父类是比子类(Cat Dog)更抽象的。
所以我们称为面向抽象编程*/
}
}
2、接口是完全抽象的,以后面向抽象编程可以改为“面向接口编程”有了接口就有了可插拔性,就像内存条一样,坏了可以拆了换一根,也即高扩展性
举例:
去饭馆吃饭的过程有接口吗?
:菜单是一个接口(菜单上抽象的菜的照片)
顾客面向菜单点菜,调用接口
厨师负责把菜做好,是接口的实现者
在此中接口的作用:
菜单使得顾客和厨师解耦合了,顾客不用找厨师,厨师不要找顾客,他们之间完全依靠抽象的菜单进行沟通(使得调用者和实现者之间的耦合度减低)
3、类型和类型之间的关系
is a:
Cat is an Animal
凡是满足is a 的表示继承关系
A extends B
has a:
I have a pen
凡是满足has a 的表示关联关系
关联关系通常以属性的形式存在
A{
B b;
}
like a:
Cooker like a FoodMenu(功能就像菜单)
凡是能够满足like a的表示实现关系
实现关系通常是:类实现接口
A implements B
三、抽象类和接口的区别
语法区别:
- 抽象类是半抽象的,接口是完全抽象的
- 抽象类中有构造方法,接口中没有
- 接口与接口之间支持多继承,类与类之间只能单继承
- 一个类可以同时实现多个接口,一个抽象类只能继承一个类
- 接口中只允许出现常量和抽象方法
- 接口一般是对行为的抽象,范围比抽象类稍微大一点
具体项目用抽象类还是接口,在实践中体会,一般来说接口用的更多