1 Inteface
1.0 特点
序号 |
特点 |
1 |
接口中所有成员变量默认为public static final |
2 |
接口中所有方法默认为抽象方法 |
3 |
接口中没有构造方法,构造方法用于创建对象 |
4 |
实现接口的类中必须重新实现接口中定义的所有抽象方法,default不是必须 |
5 |
多个无关类可以实现同一个接口,一个类可以实现多个无关的接口 |
6 |
接口与实现类间存在多态性,多态:同一个接口,使用不同的实例执行不同的操作,即同一个方法,不同的代码逻辑 |
1.2 作用
序号 |
作用 |
描述 |
1 |
有利于代码规范 |
定义明确的业务实现方法,防止开发人员随意命名 |
2 |
有利于代码维护 |
功能在接口里,统一实现,利于维护 |
3 |
保证代码安全和严密 |
高耦合低内聚,接口里不涉及任何方法的实现细节,这样较安全和严密 |
1.2 使用接口的原因
序号 |
原因 |
描述 |
1 |
代码简洁 |
将具体的功能定义在接口中,实现时统一使用接口中的方法名,实现不同的功能 |
2 |
接口实现多样(多态性),维护成本低 |
一个接口的方法,可以有不同的实现,因为在接口中只定义抽象方法,不涉及实现 |
3 |
降低耦合性 |
方法统一在接口中定义,不同类可以实现统一方法的不同功能 |
2 Java8新特性
2.1 单default关键字实现
接口中方法的默认属性,接口的实现中无需Override实现该方法.
package basic.datatype.eightnewfeature;
public interface InterfaceDefaultTest {
default void outputInfosDefault(){
System.out.println("Default method1");
}
public void outputInfosPublic();
}
package basic.datatype.eightnewfeature.impl;
import basic.datatype.eightnewfeature.InterfaceDefaultTest;
public class InterfaceImplementsTest implements InterfaceDefaultTest {
@Override
public void outputInfosPublic(){
System.out.println("Public method");
}
public static void main(String[] args){
InterfaceDefaultTest interfaceTest = new InterfaceImplementsTest();
interfaceTest.outputInfosDefault();
interfaceTest.outputInfosPublic();
}
}
- 注意
使用defalult关键字的方法,在接口中可以直接实现功能,此时的方法不是抽象方法,在接口实现中可以不进行重写.
default不在实现类中override仅限於单个default且default名称不同时.
2.2 多default关键字实现
package basic.datatype.eightnewfeature;
public interface InterfaceDefaultTest {
default void outputInfosDefault(){
System.out.println("Default method1");
}
public void outputInfosPublic();
}
package basic.datatype.eightnewfeature;
public interface InterfaceDefaultTestAnother {
default void outputInfosDefault(){
System.out.println("Default method Another");
}
public void outputInfosAnother();
}
package basic.datatype.eightnewfeature.impl;
import basic.datatype.eightnewfeature.InterfaceDefaultTest;
import basic.datatype.eightnewfeature.InterfaceDefaultTestAnother;
public class InterfaceImplementsTest implements InterfaceDefaultTest,InterfaceDefaultTestAnother {
@Override
public void outputInfosPublic(){
System.out.println("Public method");
}
@Override
public void outputInfosDefault(){
System.out.println("Default method override");
}
@Override
public void outputInfosAnother(){
System.out.println("Public method anoter");
}
public static void main(String[] args){
InterfaceDefaultTest interfaceTest = new InterfaceImplementsTest();
interfaceTest.outputInfosDefault();
interfaceTest.outputInfosPublic();
}
}
- 注意
在多个接口中,有相同的default方法,并且同时实现两个接口时,必须重写default方法.
3 小结
- default是否重写,是有条件的
- 若实现的多个接口中default方法名没有重名的,无需重新实现
- 若实现的多个接口中default方法名有重名的,必须重新实现default方法
- default方法可以有body,在接口中可以直接实现该方法
【参考文献】
[1]https://blog.csdn.net/qq_35835624/article/details/80196932
[2]https://www.cnblogs.com/LionheartCGJ/p/8466352.html
[3]https://blog.csdn.net/qq_43345641/article/details/90006399
[4]https://zhidao.baidu.com/question/85287325.html
[5]https://blog.csdn.net/liuyishan1993/article/details/79368181
[6]https://www.runoob.com/java/java-polymorphism.html