接口:接口的实现和继承注意事项,接口多重继承中名字冲突问题的解决

接口定义:接口定义时,修饰符可省略,如果省略则默认是缺省(default)的(同一个包中的成员访问)。

接口中定义的成员变量:必须是静态变量且必须初始化(静态常量),若定义时省略修饰符,则默认是 public static final;
接口中定义的成员方法:可以是静态方法(public static修饰)、默认方法(public default修饰)、抽象方法(public abstact修饰),定义抽象方法时若省略修饰符则默认仍是public abstact;

接口中的抽象方法只声明无需方法体。
接口中的静态方法和默认方法必须有方法体。

接口中的成员都是公共的,所在如果在定义接口时省略了修饰符,而在实现抽象方法时就不能省略修饰符。

接口中的常量和静态方法都是静态的,所以可以直接使用接口名调用。
接口的实现(implement)
如果实现接口的类不是抽象类,则在类的定义部分必须实现接口的所有抽象方法,即非抽象类中不能存在抽象方法。(就是在该类中定义完全相同的方法头,如果不相同就不是实现接口的抽象方法,而是一个新的方法)

因为接口中的抽象方法都已被指定为public,所有类在实现该方法时必须显式的使用public,不然就会被警告缩小了接口中定义的方法。

接口与类一样都被编译成独立的.class字节码文件

接口是可以作为引用型变量的,可以声明接口类型的变量或数组,并用他来访问实现该接口的对象。

接口的继承
接口的继承与类继承不同的是,接口可以有一个以上的父接口,它们之间用逗号隔开,形成父接口列表,子接口将继承所有父接口中的常量、抽象方法和默认方法,不能继承静态方法,也不能被实现类所继承。

一个类可以实现多个接口,在implements字句中用逗号隔开。

静态方法:不能被子接口继承也不能被实现类继承,可以直接通过接口名.方法名进行直接访问。
默认方法:需要是实现该接口的类的对象来访问,对象名.方法名

解决接口多重继承中名字冲突问题
如果子接口中定义了与父接口同名的常量或者相同名称的方法,则父接口中的常量被隐藏方法被覆盖。但在接口的多重继承中可能存在常量名或方法名重复的问题。

对于常量:若名称不冲突,则子接口可以继承多个父接口中的常量,若父接口中有同名的常量,则子接口不能继承。
对于两个父接口中都是默认方法:若一个类实现的两个接口中有同名的方法,此时编译报错,解决方法名冲突问题,可以在接口的实现类中提供同名方法,或者委托其中一个父类中的方法。(委托的父类接口.super.该父类中的方法名)
对于其中一个是抽象方法:直接在实现类中提供一个同名方法的新实现
对于两个都是抽象方法:实现类不是抽象类,直接实现该同名方法。

如果一个类继承了一个父类且实现了一个接口,同时父类和接口中继承了同名的方法。类比接口优先原则(类优先与接口)所有就只继承了父类中的忽略接口中的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值