一、基本概念
Java接口(Interface)是Java编程语言中一种重要的抽象类型,它定义了一组方法的规范而不提供具体实现。接口是Java实现多继承特性的关键机制。
二、特点
-
默认公开 :接口中的方法默认是
public abstract的 -
常量定义 :接口中可以包含常量,默认是
public static final的 -
多继承:一个类可以实现多个接口,解决了Java单继承的限制
三、接口与类的区别
| 特性 | 接口 | 类 |
|---|---|---|
| 实例化 | 不能实例化 | 可以实例化 |
| 方法实现 | Java 8前不能有实现 | 可以有具体方法实现 |
| 继承 | 可以多继承(extends) | 只能单继承(extends) |
| 实现 | 类可以实现接口 | 接口不能实现类 |
| 构造函数 | 没有 | 可以有 |
| 成员变量 | 只能是常量 | 可以是普通变量 |
四、接口的语法
1、定义接口
java
public interface MyInterface {
// 抽象方法
void method1();
// 默认方法(Java 8+)
default void defaultMethod() {
System.out.println("Default method implementation");
}
// 静态方法(Java 8+)
static void staticMethod() {
System.out.println("Static method in interface");
}
// 常量
String CONSTANT = "Interface constant";
}
2、实现接口
java
public class MyClass implements MyInterface {
@Override
public void method1() {
System.out.println("Implementing method1");
}
// 可以选择重写默认方法,也可以不重写
@Override
public void defaultMethod() {
System.out.println("Overridden default method");
}
}
五、应用场景
-
定义规范:如JDBC接口定义数据库操作规范
-
回调机制:如事件监听器接口
-
策略模式:通过不同接口实现改变算法
-
工厂模式:定义产品接口
-
适配器模式:作为目标接口
示例:比较器接口
java
public class Student {
private String name;
private int age;
// 构造方法、getter/setter省略
}
// 实现Comparator接口
public class AgeComparator implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
return s1.getAge() - s2.getAge();
}
}
// 使用
List<Student> students = new ArrayList<>();
students.add(new Student("Alice", 20));
students.add(new Student("Bob", 18));
Collections.sort(students, new AgeComparator());
六、最佳实践
-
遵循接口隔离原则(ISP),不要创建过于臃肿的接口
-
优先使用接口类型声明变量,提高代码灵活性
-
合理使用默认方法,避免"接口污染"
-
考虑使用函数式接口(@FunctionalInterface)配合Lambda表达式
-
接口命名通常使用形容词(Runnable)或名词+er(Comparator)