在继承体系中,我们有时候会发现这种情况,例如

在上图我们可以知道,子类狗和青蛙都有特有的方法游泳,兔子没有,因此我们需要在子类狗和青蛙里写特有的方法游泳,造成了代码复用,有没有一种办法能解决吗?于是就有了接口

接口是一种规则,是对行为的抽象。
那么如何定义一个接口?
接口的关键字是interface,形式为public interface 接口名{}
注意点:①接口不能实例化(无法创建接口的对象)
②接口与类之间是实现关系,通过关键字implements表示,
形式为public class 类名 implements 接口名{}
③接口的子类(实现类)
1. 要么重写接口中的所有抽象方法
2.要么是抽象类
④接口和类的实现关系,可以单实现,也可以多实现。
public class 类名 implements 接口名1,接口名2{}
⑤实现类还可以在继承一个类的同时实现多个接口。
public class 类名 extends 父类 implements 接口名1,接口名2{}

接口中成员的特点:①成员变量只能是常量,默认被public static final修饰(我们知道子类里的共有属性都被抽取到父类中,因此在接口中没有子类的共有属性,又因为接口是一种规则,是不能被改变的)
②接口中没有构造方法,因为接口是不能创建对象的,也不需要给子类或者成员变量赋值
③接口中的成员方法默认用public abstract修饰
接口与类的关系:①类和类的关系:继承关系,只能单继承,不能多继承,但是可以多层继承
②类和接口的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口(当一个类同时实现两个接口时,且两个接口中有同名的方法时,类中只需要重写一次同名的方法)
③接口和接口的关系:继承关系,可以单继承,也可以多继承(如果实现类实现了最下面的子接口,那么就要重写所有的抽象方法,因为子接口继承了父接口)
由于实现接口的类必须重写所有抽象方法,所以当接口中添加新方法时,子类必须重写方法,否则代码直接报错,直接无法运行,因为在工作中,在还没有重写方法的情况下,不能使它直接报错,所以有没有一种方法使他默认不是抽象方法。
JDK8以后接口中新增的方法:
1.允许在接口中定义默认方法,需要使用关键字default修饰。
作用:解决接口升级的问题
接口中默认方法的定义格式:
格式:public default 返回值类型 方法名(参数列表){}
范例:public default void show(){}
接口中默认方法的注意事项:(默认方法可以有方法体)
①默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候去掉default关键字(是实现类中的default,不是接口中默认方法的default)
②public可以省略,default不能省略
③如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写
2.在JDK8后,接口中可以定义静态方法
格式:public static 返回值类型 方法名(参数列表){}
范例:public static void show(){}
接口中静态方法的注意事项:
①静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
②public可以省略,static不能省略
③接口中被static修饰的静态方法,在实现类中可以不重写
JDK9新增的方法:对于接口中需要重复利用的代码(常用于default修饰的接口中的方法),可以使用private关键字修饰,此方法只为该接口服务,不需要外类访问。
接口中私有方法的定义格式:
格式1:private 返回类型 方法名(参数列表){}
范例1:private void show(){}
格式2:private static 返回值类型 方法名(参数列表){} (静态的私有方法给静态方法服务的)
范例2:private static void method(){}
总结:1.接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了。
2.当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态。
1.但一个接口中抽象方法过多,但是我只要使用其中一部分的时候,就可以适配器设计模式
2.书写步骤:
2.1编写中间类×××Adapter,实现对应的接口
2.2对接口中的抽象方法进行空实现
2.3让真正的实现类继承中间类,并重写需要用的方法(如果实现类也需要继承其他的类时,因为Java中不支持多继承,我们可以让中间类去继承实现类要继承的类)
2.4为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰
&spm=1001.2101.3001.5002&articleId=128951289&d=1&t=3&u=2fb6da0b17d4459aada339fc8561d898)
1034

被折叠的 条评论
为什么被折叠?



