接口
接口是一种公共规范标准。
接口是一种引用数据类型,最重要的内容是抽象方法
使用interface关键字
接口当中的抽象方法,修饰符必须是两个关键字,public、abstract,两个关键字个选择性省略。
public interface MyInterface { public abstract void method1(); //省略abstract public void method2(); //省略public abstract void method3(); }
接口使用步骤
1.接口不能直接使用,必须有一个“实现类”来实现接口。
格式:
public class 实现类名称 implements 接口名称{
//方法体
}
2.接口的实现必须覆盖重写接口中所有的抽象方法
public class MyInterfaceImpl implements MyInterface { @Override public void method1() { System.out.println("实现方法1"); } @Override public void method2() { System.out.println("实现方法2"); } @Override public void method3() { System.out.println("实现方法3"); } }
3.创建实现类的对象进行使用。
public class Demo01MyInterface { public static void main(String[] args) { MyInterfaceImpl myInterface = new MyInterfaceImpl(); myInterface.method1(); myInterface.method2(); myInterface.method3(); } }
结果如下
*如果实现类中并没有覆盖重写接口中所有的方法,这个类是抽象类
接口定义默认方法
Java 8之后,允许接口定义默认方法,格式如下:
public default 返回值类型 方法名称(参数列表) { 方法体 }
默认方法可以解决接口升级问题
当一个接口有很多的实现类,此时需要定义一个新的方法,不需要在各个需要类中编写方法,而在接口中定义默认方法即可实现。方便了接口的升级。
public interface MyInterface { public abstract void method1(); //省略abstract public void method2(); //省略public abstract void method3(); public default void method4(){ System.out.println("实现方法4"); } }
public class Demo01MyInterface { public static void main(String[] args) { MyInterfaceImpl myInterface = new MyInterfaceImpl(); myInterface.method1(); myInterface.method2(); myInterface.method3(); myInterface.method4(); } }
结果如下
如果在实现类中重写定义默认方法,调用是会调用实现类方法
public class MyInterfaceImplB implements MyInterface { @Override public void method1() { System.out.println("实现方法1"); } @Override public void method2() { System.out.println("实现方法2"); } @Override public void method3() { System.out.println("实现方法3"); } @Override public void method4(){ System.out.println("实现类实现方法4"); } }
public class Demo01MyInterface { public static void main(String[] args) { MyInterfaceImpl myInterface = new MyInterfaceImpl(); myInterface.method1(); myInterface.method2(); myInterface.method3(); myInterface.method4(); System.out.println("================"); MyInterfaceImplB myInterface2 = new MyInterfaceImplB(); myInterface2.method1(); myInterface2.method2(); myInterface2.method3(); myInterface2.method4(); } }
结果如下
定义静态方法
Java 8之后,接口当中允许定义静态方法,格式如下:
public static 返回值类型 方法名称( 参数列表 ) { 方法体 }
public interface MyInterface { //定义静态方法 public static void method(){ System.out.println("实现静态方法"); } }
public class Demo01MyInterface { public static void main(String[] args) { //报错! // MyInterfaceImpl myInterface = new MyInterfaceImpl(); // myInterface.method5(); MyInterface.method(); } }
注意:不能通过接口实现类的对象来调用接口的静态方法,需要通过接口名称直接调用静态方法。
定义私有方法
Java 9之后,接口允许定义私有方法
1.普通私有方法:解决多个默认方法之间重复代码问题,格式如下:
private 返回值类型 方法名称
( 参数列表 ) { 方法体 }
2.静态私有方法:解决多个静态方法之间重复代码问题,格式如下:
private static 返回值类型 方法名称 ( 参数列表 ) { 方法体 }
public interface MyInterface { public default void methodA(){ System.out.println("A"); } public default void methodB(){ System.out.println("B"); } //私有方法 private void method(){ System.out.print("实现方法"); } }
定义成员变量
必须使用public static final三个关键字,所以其实是一个常量,一旦赋值便不可修改。
注意事项:
1.三个关键字可以省略,省略与否效果都是一样的。
2.接口中的常量必须赋值。
3.接口中常量名称全部大写,用下划线分隔单词
使用方法:
接口名称.成员变量名称
public interface MyInterface { public static final int NUM_OF_CLASS = 10; int NUM_OF_SEAT = 5; }
public class Demo01MyInterface { public static void main(String[] args) { System.out.println("The number of class is "+MyInterface.NUM_OF_CLASS); System.out.println("The number of seat is "+MyInterface.NUM_OF_SEAT); } }
结果如下: