接口的组成更新
- 接口组成概述
- 常量:public static final
- 抽象方法:public abstract
- 默认方法(Java 8):public default (重点记忆)
- 静态方法(Java 8):public static(只能接口名访问)
- 私有方法(Java 9):private
接口中默认方法
-
概述
用于接口的升级,而不影响现有的代码。 -
接口中默认方法格式
格式:public default 返回值类型 方法名(参数列表){ }
范例:public default void show(){ } -
演示
//接口 public interface MyInterface { void show1(); void show2(); //默认方法 public default void show3(){ System.out.println("3"); } }
//实现类 public class MyInterfaceImpl implements MyInterface{ @Override public void show1() { System.out.println("show1"); } @Override public void show2() { System.out.println("show2"); } //可以选择性重写接口中的默认方法 @Override public void show3(){ System.out.println("show3*"); } }
//测试类 public class Demo { public static void main(String[] args) { MyInterface m = new MyInterfaceImpl(); m.show1(); m.show2(); m.show3(); } } ---*--- 输出结果: show1 show2 show3*
注意:
- 接口的默认方法不是抽象方法,所以不强制重写,但也可以重写。重写需要去掉 default 关键字。
- 接口的默认方法可以省略 public 关键字。
接口中静态方法
-
接口中静态方法格式
格式:public static 返回值类型 方法名 (参数列表){ }
范例:public static void show(){ } -
演示
//接口 public interface MyInterface { //抽象方法 void absM(); //默认方法 public default void defM(){ System.out.println("默认方法"); } //静态方法 public static void staM(){ System.out.println("静态方法"); } }
//实现类 public class MyInterfaceImpl implements MyInterface{ @Override public void absM() { System.out.println("抽象方法"); } }
public class Demo { public static void main(String[] args) { MyInterface m = new MyInterfaceImpl(); m.absM(); m.defM(); // m.staM();//报错,接口的静态方法只能通过接口名调用 MyInterface.staM(); } } ---*--- 输出结果: 抽象方法 默认方法 静态方法
注意:接口的静态方法,只能通过接口名调用。public可以省略,static 不能省略。
接口中私有方法
-
接口中私有方法格式
格式1:private 返回值类 方法名(参数列表){ }
范例1:private void show(){ }格式2:private static 返回值类型 方法名(参数列表){ }
范例2:private static void method(){ } -
演示
//接口 public interface MyInterface { public default void show1(){ System.out.println("show1-开始"); // System.out.println("s1"); // System.out.println("s2"); // System.out.println("s3"); show(); System.out.println("show1-结束"); } public default void show2(){ System.out.println("show2-开始"); // System.out.println("s1"); // System.out.println("s2"); // System.out.println("s3"); show(); System.out.println("show2-结束"); } //接口私有方法 private void show(){ System.out.println("s1"); System.out.println("s2"); System.out.println("s3"); } public static void method1(){ System.out.println("method1-开始"); // System.out.println("m1"); // System.out.println("m2"); // System.out.println("m3"); method(); System.out.println("method1-结束"); } public static void method2(){ System.out.println("method2-开始"); // System.out.println("m1"); // System.out.println("m2"); // System.out.println("m3"); method(); System.out.println("method2-结束"); } //接口静态私有方法 private static void method(){ System.out.println("m1"); System.out.println("m2"); System.out.println("m3"); } }
//实现类 public class MyInterfaceImpl implements MyInterface{ }
//测试类 public class Demo { public static void main(String[] args) { MyInterface m = new MyInterfaceImpl(); m.show1(); System.out.println("--------"); m.show2(); System.out.println("--------"); MyInterface.method1(); System.out.println("--------"); MyInterface.method2(); } } ---*--- 输出结果: show1-开始 s1 s2 s3 show1-结束 -------- show2-开始 s1 s2 s3 show2-结束 -------- method1-开始 m1 m2 m3 method1-结束 -------- method2-开始 m1 m2 m3 method2-结束
注意:接口中的私有方法主要用于封装接口中默认方法和静态方法的相同代码成一个共性方法。而此共性方法不需要让别人使用,所以将其私有化。