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)

相关推荐
2501_944521596 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
行思理7 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
wangchunyu1148 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck9 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir9 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人9 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_9445215910 小时前
Immer 跨端三方库仓颉适配全流程
python·eclipse·django
信誓旦旦的程序猿10 小时前
【Python量化实战宝典 #26】止损与回撤控制手册:移动止损、最大回撤(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
2501_9445215910 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
Patrick在香港10 小时前
同一行 strftime,两台机器跑出两种日期
python·datetime·时区·locale·日期处理