目录
一、接口的概念
接口 : Java 引用数据类中的一大种类 -> interface
[类(class),接口(interface),数组(Array),枚举(enum),注解(@interface)]
类 是一类事物的抽象; //封装了一类数的属性和行为
抽象类 是比类更抽象的类; //抽象类中有抽象方法且不能创建的对象
接口 是比抽象类还抽象的"类"; // 当一个类中只有抽象方法的时候,就可以把这个类定义成 接口 [接口也是一种类型]
二、接口和类之间的关系
类和类之间的关系 : 继承 [extends] -> 单一继承多层继承
类和抽象类之间的关系 : 继承 [extends] -> 单一继承多层继承
接口和类之间的关系 : 实现 [implements] -> 多实现(一个子类可以实现多个父接口)
接口和接口之间的关系 : 继承 [extends] -> 多继承(一个子接口可以继承多个父接口)
结论 : 接口的出现打破了Java中继承的单一性 (实现也是一种特殊的继承)
三、接口的定义格式
格式 :
//接口名和类名的命名规则是一样的 : 大驼峰
public interface 接口名{
}
public interface UncleOne{}
public interface UncleTwo{}
public class Fu{}
//一个子类继承一个父类实现多个父接口的格式 :
public class Zi extends Fu implements Uncle1,Uncle2{
}
//一个子接口继承多个父接口
public interface InterZi extends UncleOne,UncleTwo{
}
四、在JDK7中的接口
public interface InterJDK7{
自定义常量 默认被public static final 修饰
接口中不允许有成员变量
public static final int NUM = 100;
抽象方法 默认被 public abstract 修饰
public abstract void method();
接口中不允许有构造方法,肯定创建不了接口对象!
接口如何使用 : //接口的子类也叫实现类
1. 拿类实现接口,重写父接口中所有的抽象方法 --> 在使用接口的地方创建实现类对象,使用实现类对象调用重写后的方法
2. 拿类实现接口,把实现类变成抽象类 --> 把父接口中的抽象方法交付给实现类的子类们去实现
}
五、在JDK8中的接口
JDK8版本的成员 :
1. 自定义常量 : 默认被 public static final 修饰
//接口中没有成员变量,在成员位置上的变量全是 自定义常量
2. 抽象方法 : 默认被 public abstract 修饰
//默认方法和静态方法是允许有方法体的
3. 默认方法 :
格式 :
public default 返回值类型 方法名(形式从参数列表){
//方法体
}
默认方法 : 默认被 public 修饰 //default 必须自己加
4. 静态方法 :
格式 :
public static 返回值类型 方法名(形式从参数列表){
//方法体
}
静态方法 : 默认被 public 修饰 //static 必须自己加
接口如何使用 : //接口的子类也叫实现类
1. 拿类实现接口,重写父接口中所有的抽象方法 --> 在使用接口的地方创建实现类对象,使用实现类对象调用重写后的方法
/*
接口中的抽象方法必须 全部重写 !
接口中的默认方法可以选择性重写 [想重写重写,不想重写可以不重写] -> 使用实现类对象调用
//当多个父接口中的有相同声明的默认方法,实现类必须重写父接口中的默认方法 !!
接口中的静态方法不能重写 -> 只能使用接口名调用静态方法 []
*/
2. 拿类实现接口,把实现类变成抽象类 --> 把父接口中的抽象方法交付给实现类的子类们去实现
六、在JDK9中的接口
JDK9版本的成员 :
1. 自定义常量 : 默认被 public static final 修饰
//接口中没有成员变量,在成员位置上的变量全是 自定义常量
2. 抽象方法 : 默认被 public abstract 修饰
//默认方法和静态方法是允许有方法体的
3. 默认方法 :
4. 静态方法 :
//新增的私有方法 是为接口中的默认方法和静态方法服务的
5. 私有方法 : [静态私有,非静态私有]
非静态私有的格式 : //为默认方法服务
private 返回值类型 方法名(形参列表){
//方法体
}
静态私有的格式 : //为静态方法
private static 返回值类型 方法名(形参列表){
//方法体
}
关于私有方法的使用 只能在接口内使用 !