接口
概念
类似一种特殊的抽象类,是一种标准、一种能力、一种约束
Java为单继承 当父类的方法种类无法满足子类需求时,可实现接口扩充子类能力
语法
关键字 interface
public interface 接口名{}
public interface MyInterface{
}
特点
- 接口不能实例化
- 接口不能有构造方法
- 接口中的变量是默认为静态的常量
- 接口中的方法是默认为公开的抽象
- 接口支持多实现,可为类扩充多种能力
接口实现
接口的规范
- 任何类在实现接口时,必须实习接口中所有的抽象方法,否则此类为抽象类
- 实现接口中的抽象方法时,访问修饰符必须是public
接口引用
- 同继承中父类一样,接口也可以声明为引用,并指向实现类对象
- 注意:
- 仅可调用接口中声明的方法,不可调用实现类中独特方法
- 可强转回实现类本身类型,进行独有方法调用
实现类规范
命名
- I+接口名
- 接口名+Impl
包:一般创建在接口所在的包的子包 名称为 impl
语法:
//单实现
public class Impl1 implements Interface{
}
//多实现
public class Impl1 implements Interface,Interface2,...{
}
接口的多态
多种不同类型的引用指向同一个对象时,表示看待对象的视角不同
不同的引用所能看到的对象范围不同,只能调用自身类型中所声明的部分
例如:Runnable r = new Dog()把狗看成会跑的东西
常见关系
类与类
- 单继承
- extends 父类名称
类与接口
- 多实现
- implements 接口1,接口2,接口n
接口与接口
- 多继承
- extends 父接口1,父接口2,父接口n
常量接口
将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理,提高代码可读性
接口回调
先有接口的使用者,后有接口的实现者
实现流程
- 声明接口引用
- 使用时将符合接口标准的实例去赋值声明的接口
- 设置一个通知的方法
- 通知方法里,用声明的接口引用名去调用接口中的方法
- 根据实际的情况,通过使用者去运行这个调用
接口的好处
- 降低程序的耦合度
- 更自然的使用多态
- 设计与实现分离
- 更容易搭建程序框架
- 更容易更换具体实现
接口vs抽象类
相同
- 不能创建对象
- 可作为引用类型(即类似于 Animal animal = new Dog())
- 可编译为字节码文件
- 具备Object类中所定义的方法
- 都可拥有抽象方法
不同
-
接口中所有属性都是公开静态常量,隐式使用public static final修饰
抽象类中有普通属性
-
接口中的方法都是公开抽象方法,隐式使用public abstract 修饰
抽象类中有抽象方法、也有普通方法
-
接口中没有构造方法、动态代码块、静态代码块
抽象类中可以有构造方法、动态代码块、静态代码块