1.接口默认方法、静态方法
- 接口默认方法、静态方法
类比抽象类的默认实现,实现类可以不进行覆盖 - 默认方法使用关键字
default 标识 - 静态方法由
static 关键字标识
- 原则1:类优先
如果,实现类继承了其他父类,并且父类中存在同名同参的方法,那么优先调用父类中的方法 - 原则2:冲突指定
当实现多个接口时,如果存在同名同参的方法,将出现冲突,存在两种解决 1.实现该方法,重写逻辑 2.实现该方法,指定使用哪个接口的默认实现 - 注:JDK9中还包含 private 声明
2.代码示例(注意 类优先、冲突解决)
public class _Test {
public static void main(String[] args) {
Interface001.static_();
A a = new A();
a.sout1();
a.sout2();
a.parent();
System.out.println();
B b = new B();
b.sout1();
b.sout2();
System.out.println();
C c = new C();
c.sout1();
c.sout2();
}
interface Interface001 {
void sout1();
default void sout2() {
System.out.println("【default】【Interface001】【sout2】");
}
default void parent() {
System.out.println("【default】【Interface001】【parent】");
}
static void static_() {
System.out.println("【default】【Interface001】【static_】");
}
}
interface Interface002 {
void sout1();
default void sout2() {
System.out.println("【default】【Interface002】【sout2】");
}
}
static class Parent {
public void parent() {
System.out.println("【class】【Parent】【parent】");
}
}
static class A extends Parent implements Interface001 {
@Override
public void sout1() {
System.out.println("【class】【A】【sout1】");
}
}
static class B implements Interface002 {
@Override
public void sout1() {
System.out.println("【class】【B】【sout1】");
}
}
static class C extends Parent implements Interface001, Interface002 {
@Override
public void sout1() {
System.out.println("【class】【C】【sout1】");
}
@Override
public void sout2() {
Interface001.super.sout2();
}
}
}
《目录:Java基础》
《目录:JDK1.8新特性》
《幕》
- 留白 —<老吉>
- ~ 今 ~ ? ~ ?????????? ?????????? ???????
|