1.接口:就是一种规则;
2.接口的定义和使用:
a.接口用关键字interface来定义
public interface 接口名{}
b.接口不能实例化
c.接口和类之间是实现关系,通过implements关键字表示
public class 类名 implements 接口名{}
d.接口的子类(实现类)
要么重写接口中的所有抽象方法
要么是抽象类
e.注意1:接口和类的实现关系,可以单实现,也可以多实现.
public class 类名 implements 接口名1,接口2{}
f.注意2:实现类还可以再继承一个类的同时实现多个接口.
public class 类名 extends 父类 implements 接口名1,接口名2{}
public class Dog extends Animal implements Util{
public Dog(){};
public Dog(String name ,int age){
super(name,age);
}
public void eat(){
System.out.println("狗吃骨头");
}
public void swim(){
System.out.println("狗刨");
}
}
3.接口中成员的特点:
a.成员变量:只能是常量,默认修饰符: public static final(建议书写)
b.构造方法:没有
c.成员方法:只能是抽象方法,默认修饰符:public abstract(建议书写)
d.JDK7以前:接口中只能定义抽象方法
e.JDK8的新特性:接口中可以定义有方法体的方法
f.JDK9的新特性:接口中可以定义私有方法.
4.接口和类之间的关系:
a.类和类的关系:
继承关系,只能单继承,不能多继承,但是能多层继承
b.类和接口的关系:
实现关系:可以单实现,也可以多实现,还可以再继承一个类的同时实现多个接口(需要实现所有的方法)
细节:当多个接口中有重名的方法时,只需要重写一次就行
c.接口和接口的关系:
继承关系,可以单继承,也可以多继承
细节:如果实现类实现了最下面的子类接口,那么就需要重写所有的抽象方法(父类的方法)
public interface Interf1 {
public abstract void method1();
public abstract void method2();
}
public interface Interf2 extends Interf1{
public abstract void method1();
}
public class Interf3 implements Interf2{
//方法1只重写了一次
@Override
public void method1() {
System.out.println("method1");
}
@Override
public void method2() {
System.out.println("method2");
}
//实现类重写了全部的方法
}
5.JDK8以后接口中可以定义有方法体的方法1:默认方法:
a.允许接口中定义默认方法,需要使用关键字default修饰(作用:解决接口升级的问题)
b.接口中默认方法的定义格式:public default 返回值类型 方法名(参数列表) {}
public default void show(){}
6.接口中默认方法的注意事项:
a.默认方法不是抽象方法,所以不强制重写,但是如果被重写,重写的时候去掉default关键字
b.public可以省略,default不能省略
c.如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对方法进行重写
7.JDK8以后接口中可以定义有方法体的方法2:静态方法
a.允许接口中定义静态方法,需要用static修饰
b,接口中静态方法的定义格式:public static 返回值类型 方法名(参数列表){}
public static void show(){}
8.接口中静态方法的注意事项:
a.静态方法只能通过接口名调用,不能通过实现类名或则对象名调用
b.public可以省略,static不能省略
9.JDK9的新特性:接口中可以定义私有方法:
a.格式1:private 返回值类型 方法名(参数列表){}
给默认方法服务
private void show(){}
b.格式2:private static 返回值类型 方法名(参数列表){}
给静态方法服务
private static void show(){}
10.接口的应用:
a.接口代表规则,是行为的抽象.想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了
b.当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称为接口多态
11.适配器设计模式:
a.设计模式是一套被反复使用,多数人晓得,经过分类编目的,代码设计经验的总结.当使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性,程序的重用性.
简单理解:设计模式就是各种套路
b.适配器设计模式:解决接口与接口实现类之间的矛盾问题
c.当一个接口抽象方法过多,但是我只要使用其中一部分的时候,就可以用适配器设计模式
d.书写步骤:
编写中间类XXX(XXX代表方法名)Adapter,实现对应的接口,对接口中的抽象方法进行空实现,让真正的实现类继承中间类,并重写需要的方法,为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰