Java——接口
一、介绍
- 接口是Java语言中的一种引用类型(其他的引用类型有数组、类、String、集合...)
- 接口,和类属于同一级别
- 接口,可以理解为是方法的集合体(接口中通常就是用来定义方法的)
- 接口中封装的就是抽象方法(JDK1.7之前)
- 从JDK1.8开始,接口中增加了:静态方法、默认方法
- 从JDK1.9开始,接口中增加了:私有方法
- 接口,不能实例化(不能创建对象)[接口中没有构造方法]
二、接口的定义
使用关键字interface关键字来定义接口
格式为: interface 接口名{...}
public interface Test { // 接口中的成员 }
三、接口中的成员
JDK1.8之前只能定义静态常量和抽象方法
public interface Test { // 静态常量 public static final int NUMBER = 100; // 常量名通常全大写 // 抽象方法 public abstract void method(); }
JDK1.8添加了静态方法、默认方法
// 接口的命名方式:大驼峰 public interface Test { // 静态常量 // ... // 抽象方法 //... //默认方法 public default int addNum(int n){ return n + 1; } // 静态方法 public static void method(){ } }
JDK1.9添加了私有方法
// 接口的命名方式:大驼峰 public interface Test { // 静态常量 // ... // 抽象方法 // ... //默认方法 // ... // 静态方法 // ... //私有方法 private boolean isOpen(){ return false; } }
小结一下,接口中可以书写的内容
- 静态常量
- 抽象方法
- 静态方法
- 默认方法
- 私有方法
四、接口的基本使用
在Java语言中接口不能实例化,需要定义一个子类来实现(继承)接口,通过实例化子类对象,来访问接口的成员。
子类实现接口,使用关键字:implements
在子类实现接口之后,必须对接口中的抽象方法进行重写
举例如下
// Hello.java 定义接口 public interface Hello { // 静态常量 public static final int NUMBER = 100; // 抽象方法 public abstract void method(int num); } // Child.java 子类实现接口 public class Child implements Hello { // 重写抽象方法 @Override public void method(int num){ // 方法体代码 System.out.println(num); } } // Test.java 测试类调用方法 public class Test { public static void main(String[] args) { // 实例化子类对象 Child child = new Child(); // 使用对象本身类型来定义 child.method(100); // 调用重写后的方法 打印100 // 多态的体现 Hello h = new Child(); // 使用对象的父类型来定义 h.method(200); // 调用重写后的方法 打印200 } }
调用接口中默认方法的例子如下
// Hello.java public interface Hello { // 默认方法 public default void show(){ System.out.println("我是接口中的默认方法"); } } // Child.java 子类实现接口 public class Child implements Hello { } // Test.java public class Test { public static void main(String[] args) { Child child = new Child(); child.show(); // 我是接口中的默认方法 } }
获取接口中常量的例子如下
// Hello.java public interface Hello { // 静态常量 public static final String CITY = "合肥"; } // Test.java public class Test { public static void main(String[] args) { Child child = new Child(); System.out.println(Hello.CITY); // 合肥 } }