本章目标
1. 接口的语法
2. 接口的应用
3. 接口和抽象类的区别
4. jdk1.8 接口新特性
5. 匿名内部类
本章内容
一、接口语法:
1. 概念,
接口是一种规则和标准,而这些规则和标准需要实现类实现,侧重于can do
2. 接口的实现:
使用implements关键字
说明:
public interface 接口名称 {
全局常量;
公有抽象方法;
}
接口中定义的属性,默认为:public static final
接口中定义的方法,默认为:public abstract
接口中没有构造器
接口不能被实例化,主要作用就是被实现类实现
一个类可以实现多个接口
一个类既可以实现多个接口也可以同时继承一个类,但是继承需要写到实现的前面,先继承后实现
一个接口可以继承多个接口
二、接口应用场景
1、有很多重复代码,但是没有办法用is a的原则找到一个共同的父类,我们可以考虑将重复代码所体现的能力提取到接口中,让不同的实现类实现,调用者传递不同的实现类对象,提高项目的可扩展性和可维护性
2、打补丁 ,规定可以做什么,对已有功能进行扩展,但是并不想修改已有类型或者并不想让继承体系变得复杂,就可以使用接口扩展以后的功能
分析:
防盗门是一个门 ——> is a 的关系
不是所有的门都有防盗能力,防盗门可以上锁,可以开锁
如果使用继承,将门分为防盗门和普通门,会导致继承关系复杂,使用接口表示防盗门的这种能力
原始的手机,可以发短信,通电话。随着发展,
手机增加了功能:音频、视频播放、拍照、上网
3、提供约定,主体结构使用接口进行搭建(面向接口开发)
三、接口和抽象类的区别:
- 接口中不能写实例属性,但是抽象类中可以写实例属性,如果说在父类中想定义一些实例属性体现所有子类通用的属性,那么只能选择使用抽象类,如果没有上述需求,接口和抽象类都可以,那么优先使用接口,因为接口会更灵活一些。
- 抽象类中可以写构造方法,接口没有构造器
- 接口和类之间的关系是实现关系,不一定满足is a的原则,但是抽象类是属于继承体系,需要满足is a的原则
- 接口和接口之间可以有继承关系,并且是多继承,类和类之间的继承关系是单继承
四、Jdk1.8之后可以在接口中定义非抽象方法:default方法以及静态方法
- 静态方法:
使用接口名称调用 - Default方法
如果一个类同时实现接口A和B,接口A和B中有相同的default方法,这时,该类必须重写接口中的default方法
1. public interface A {
3. public default void test(){
5. System.out.println("我是接口a中的静态方法");
7. }
8. }
9. interface C {
11. public default void test(){`
13. System.out.println("我是接口c中的静态方法");
15. }
16. }
17. public class B implements A,C{
18. public static void main(String[] args) {`
20. B b=new B();
22. }
23. @Override
24. public void test() {
25. // TODO Auto-generated method stub`
26. C.super.test();
27. }
28. }
五、内部类
匿名内部类
匿名内部类在创建的时候使用一次,必然是一个实现类或者子类,每次创建对象都想对接口中的方法或者父类中的方法做不同的实现,可以考虑使用匿名内部类