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)

相关推荐
weixin_459753942 分钟前
MySQL主从同步跳过错误影响一致性_使用pt-table-sync修复
jvm·数据库·python
kexnjdcncnxjs8 分钟前
如何解决Oracle 12c以上版本的ORA-65096_C##公共用户前缀限制
jvm·数据库·python
特种加菲猫18 分钟前
二叉搜索树:数据世界的“快速寻路指南”
开发语言·c++
zhoutongsheng21 分钟前
MySQL触发器无法触发的原因分析_MySQL触发器排查指南
jvm·数据库·python
夏沫琅琊21 分钟前
基于python 的日志文件分析器
python
财经资讯数据_灵砚智能23 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年5月10日
大数据·人工智能·python·信息可视化·自然语言处理
2301_7796224123 分钟前
不同品牌SSD对HTML函数工具加载速度影响大吗_存储测试汇总【汇总】
jvm·数据库·python
特种加菲猫24 分钟前
STL关联容器:Set/Multiset与Map/Multimap详解
开发语言·c++
我滴老baby30 分钟前
0基础速通Python+AI|2026热门轻量化玩法全攻略:从入门到实战,3天搞定AI应用开发
开发语言·人工智能·python
源码集结号33 分钟前
基于 Spring Boot + JPA + MySQL的上门家政系统代码示例
java·前端·后端