一、接口
1、接口
①为什么有接口?
- 接口:就是一种规则
②接口和抽象类的异同
接口就是一种规则,是对行为的抽象
③接口的定义和使用
- ⭐接口用关键字 interface 来定义
public interface 接口名 {}
- 接口不能实例化,没有参数
- ⭐接口和类之间是实现关系,通过 implements 关键字表示
public class 类名 implements 接口名 {}
- 接口的子类(实现类)
要么重写接口中的所有抽象方法
要么是抽象类
注意1:接口和类的实现关系,可以单实现,也可以多实现。
public class 类名 implements 接口名1,接口名2{}
注意2:实现类还可以在继承一个类的同时实现多个接口。
public class 类名 extends 父类 implements 接口名1,接口名2{}
④练习——编写带有接口和抽象类的标准Javabean类
青蛙 属性:名字,年龄 行为:吃虫子,蛙泳 狗 属性:名字,年龄 行为:吃骨头,狗刨 兔子 属性:名字,年龄 行为:吃胡萝卜 |
Animal类
接口Swim
青蛙Frog类
狗Dog类
兔子Rabbit类
测试类
2、接口的细节:成员特点和接口的各种关系
①接口中成员的特点
- 成员变量
只能是常量
默认修饰符: public static final
- 构造方法
没有
- 成员方法
只能是抽象方法
默认修饰符: public abstract
- JDK7以前:接口中只能定义抽象方法
②接口和类之间的关系
- 类和类的关系
继承关系,只能是单继承,不能多继承,但是可以多层继承
- 类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
重写里面的所有抽象方法(不重复的)
- 接口和接口的关系
继承关系,可以单继承,也可以多继承
细节:如果实现类实现了最下面的子接口,那么就需要重写所有的抽象方法
例子:
举例:类与接口的关系——方法不同的重写
![]()
测试结果:
举例:接口和接口的关系
细节:实现类实现了最下面的子接口,那么就需要重写所有的抽象方法
![]()
![]()
测试结果:
3、接口和抽象类的综合案例
练习:编写带有接口和抽象类的标准Javabean类
乒乓球运动员:姓名,年龄,学打乒乓球,说英语 篮球运动员:姓名,年龄,学打篮球 乒乓球教练:姓名,年龄,教打乒乓球,说英语 篮球教练:姓名,年龄,教打篮球 |
分析图 ⭐⭐⭐⭐⭐
Person类
Sporter运动员类
教练Coach类
中间接口English
子类:乓乓球运动员
子类:篮球运动员
子类乒乓球教练:
子类篮球教练
测试类:
4、接口中新增方法,接口应用和适配器设计模式
1、接口中新增方法
总结:1、JDK7以前:接口中只能定义抽象方法。
2、⭐⭐JDK8:接口中可以定义有方法体的方法。(默认、静态)
- 允许在接口中定义默认方法,需要使用关键字default修饰
作用:解决接口升级问题
接口中默认方法的定义格式:
- 格式: public default 返回值类型 方法名(参数列表){ }
- 范例: public default void show( ) { }
接口默认方法的注意事项:
- 默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候去掉default关键字
- public可以省略,default不能省略
- 如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写
- 允许在接口中定义静态方法,需要用static修饰
接口中静态方法的定义格式:
- 格式:public static 返回值类型 方法名(参数列表){ }
- 范例:public static void show(){ }
接口中静态方法的注意事项:
- 静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
- public可以省略,static不能省略
3、JDK9:接口中可以定义私有方法。
4、私有方法分为两种:普通私有方法,静态的私有方法
接口中私有方法的定义格式:
- 格式1:private 返回值类型 方法名(参数列表){ }
- 范例1:private void show(){ }
- 格式2:private static 返回值类型 方法名(参数列表){ }
- 范例2:private static void method(){ }
2、接口应用
总结:1.接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应接口就可以了
2.当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方法称之为接口多态。
3、适配器设计模式
1、当一个接口中抽象方法过多,但是我只要使用其中一部分的时候,就可以用适配器设计模式
2、书写步骤:
- 编写中间类XXXAdapter,实现对应的接口
- 对接口中的抽象方法进行空实现
- 让真正的实现类 继承 中间类,并重写需要用的方法
- 为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰
创建接口 中间类
实现类 继承 中间类