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)

相关推荐
兵慌码乱18 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
朦胧之19 小时前
AI 编程-老项目改造篇
java·前端·后端
金銀銅鐵19 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
程序猿大帅1 天前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
程序员晓琪1 天前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly1 天前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨1 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜1 天前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端