Java——接口

一、基本概念

Java接口(Interface)是Java编程语言中一种重要的抽象类型,它定义了一组方法的规范而不提供具体实现。接口是Java实现多继承特性的关键机制。

二、特点

  1. 默认公开 :接口中的方法默认是public abstract

  2. 常量定义 :接口中可以包含常量,默认是public static final

  3. 多继承:一个类可以实现多个接口,解决了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");
    }
}

五、应用场景

  1. 定义规范:如JDBC接口定义数据库操作规范

  2. 回调机制:如事件监听器接口

  3. 策略模式:通过不同接口实现改变算法

  4. 工厂模式:定义产品接口

  5. 适配器模式:作为目标接口

示例:比较器接口

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());

六、最佳实践

  1. 遵循接口隔离原则(ISP),不要创建过于臃肿的接口

  2. 优先使用接口类型声明变量,提高代码灵活性

  3. 合理使用默认方法,避免"接口污染"

  4. 考虑使用函数式接口(@FunctionalInterface)配合Lambda表达式

  5. 接口命名通常使用形容词(Runnable)或名词+er(Comparator)

相关推荐
我的xiaodoujiao4 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 38--Allure 测试报告
python·学习·测试工具·pytest
Boilermaker199210 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
沈浩(种子思维作者)10 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
Cherry的跨界思维10 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS10 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂11 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs11 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_9911 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
io_T_T11 小时前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
一嘴一个橘子11 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java