Java中面向对象之接口(interface接口与implements实现、接口与类的关系)

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

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

 接口是一种规则,是对行为的抽象。

那么如何定义一个接口?

接口的关键字是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进行修饰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值