1、接口基础
-
概念:接口相当于特殊的抽象类,定义方式、组成部分和抽象类类似
-
接口是一种标准
-
Java为单继承,当父类的方法种类无法满足子类需求时,可以通过实现接口扩充子类能力
-
接口支持多实现,可为类扩充多种能力。
-
语法:
-
使用interface关键字定义接口
特点:
-
没有构造方法,不能创建对象
-
只能定义:公开静态常量(可以省略public static final)、公开抽象方法(可以省略public abstract)
public interface MyInterFace{ public static final String FIELD = "value"; public abstract void method(); }
-
-
使用
//定义接口 interface MyInterface { void methon1(); } //定义接口实现类 public class Impl implements MyInterface{ @Override public void methon1(){ System.out.println("methon1") } } //主函数 MyInterface myInterface = new Impl; myInterface.methon1(); (输出:methon1)
1.2 接口和抽象类的异同
-
相同:
-
可编译成字节码文件
-
不能创建对象
-
可以作为引用类型(声明变量)
-
具备Object类中所定义的方法
-
-
不同:
-
接口所有属性都是公开静态常量,隐式使用public static final修饰
-
接口所有方法都是公开抽象方法,隐式使用public abstract 修饰
-
接口没有构造方法、动态代码块、静态代码块。
-
1.3、接口规范
-
任何类在实现接口时,必须事先接口中所有的抽象方法,否则此类为抽象类。
-
实现接口中的抽象方法时,访问修饰符必须是public。
1.4、接口引用
-
接口同父类一样,接口也可以声明引用(不可实例化对象(new)),并指向显示类对象。
-
仅可以调用接口中声明的方法(fly(接口) = Person(实例对象),fly不可以使用Person中的方法),不可调用实现类独有的方法。
-
接口引用可强转回显示类本身类型,进行独有方法的调用。
-
继承和实现同时存在,继承在前,实现在后。
1.5、接口的多态
-
多种不同类型的引用指向同一个对象时,表示看待对象的视角不同。
-
不同引用看到的对象范围不同,还能调用自身类型中所声明的部分。
public class TestPolymorpfic { public static void main(String[] args) { Dog myDog = new Dog(); Animal a = myDog; Runnable r = myDog; Swimmable s = myDog; s.swim(); r.run(); a.sleep(); myDog.shot(); } } interface Runnable{ void run(); } interface Swimmable{ void swim(); } abstract class Animal{ public void eat(){} public void sleep(){} } class Dog extends Animal implements Runnable,Swimmable{ @Override public void eat(){} @Override public void swim(){} @Override public void run(){} public void shot(){} }
-
接口和接口之间可以多继承: 接口 extends 父接口1,父接口2,父接口n
1.6、接口回调
-
接口回调:先有接口的使用者,后有接口的实现者
1.7、接口的好处
-
程序的耦合度降低
-
更自然的使用多态
-
设计与实现完全分离
-
更容易搭建程序框架
-
更容易更换具体
1.8、常量接口
-
将多个常用于表示状态或者固定值的变量,以静态常量的形式定义在接口中统一管理,提高代码可读性
1.9、标记接口
-
接口没有任何成员,仅仅是一个标记。Serializable、Clonable。
1.10、JDK1.8接口变化
-
JDK1.8之后接口中可以包含静态方法和默认方法
-
静态方法:不可被继承,通过接口名.方法名调用
-
默认方法:可以被继承,也可以被重写,通过实现类调用