JDK1.8新特性【之】接口默认方法、静态方法

JDK1.8新特性【之】接口默认方法、静态方法

  • 1.接口默认方法、静态方法
  • 2.代码示例(注意 类优先、冲突解决)
  • 《目录:Java基础》
  • 《目录:JDK1.8新特性》
  • 《幕》

1.接口默认方法、静态方法

  • 接口默认方法、静态方法
    类比抽象类的默认实现,实现类可以不进行覆盖
  • 默认方法使用关键字 default 标识
  • 静态方法由 static关键字标识
  • 原则1:类优先
    如果,实现类继承了其他父类,并且父类中存在同名同参的方法,那么优先调用父类中的方法
  • 原则2:冲突指定
    当实现多个接口时,如果存在同名同参的方法,将出现冲突,存在两种解决
    1.实现该方法,重写逻辑
    2.实现该方法,指定使用哪个接口的默认实现
  • 注:JDK9中还包含 private 声明

2.代码示例(注意 类优先、冲突解决)

/**
 * 接口默认方法、静态方法
 * 默认方法使用关键字 default 标识
 * 类比抽象类的默认实现,子类可以不主动实现该方法
 * 

* 原则1:类优先 * 如果,实现类继承了其他父类,并且父类中存在同名同参的方法,那么优先调用父类中的方法 *

* 原则2:冲突指定 * 当实现多个接口时,如果存在同名同参的方法,将出现冲突,存在两种解决 * 1.实现该方法,重写逻辑 * 2.实现该方法,指定使用哪个接口的默认实现 *

* 注:JDK9中还包含 private 声明 */ public class _Test { /** * 输出结果 *

* 【class】【A】【sout1】 * 【default】【Interface001】【sout2】 * 【class】【Parent】【parent】 *

* 【class】【B】【sout1】 * 【default】【Interface002】【sout2】 *

* 【class】【C】【sout1】 * 【default】【Interface001】【sout2】 */ 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】"); } } /** * 对默认实现方法,出现冲突时,存在两种解决 * 1.实现该方法,重写逻辑 * 2.实现该方法,指定使用哪个接口的默认实现 */ 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新特性》

  • 点击跳转

《幕》

  • 留白 —<老吉>
  • ~ 今 ~ ❀ ~ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀

你可能感兴趣的:(JDK1.8新特性,java1.8)