
前言在 Java 面向对象基础中我们学习了类、继承、抽象类而interface接口是面向对象高级特性里核心的解耦工具也是开发中最常用的规范定义手段。本章分两部分先吃透接口内部所有成员规则再通过综合案例对比接口与抽象类的适用场景彻底分清二者区别掌握企业级开发规范写法。一、什么是接口interface接口是一套行为契约标准只定义能力规范不关心具体实现。语法定义使用interface关键字而非class核心定位用来提取不同类的公共行为弥补 Java 单继承的局限一个类只能继承一个父类但可以实现多个接口关键字搭配类通过implements实现接口必须重写接口中所有抽象方法。基础示例// 定义播放器接口规定播放、暂停两个行为标准 public interface Player { void play(); void pause(); }二、接口中的全部成员第 15 节核心知识点Java8、Java9、Java11 对接口持续扩展接口内可存在 4 类成员每一类都有强制修饰符规则1. 常量成员变量接口中定义的变量默认是public static final修饰必须初始化不能修改本质是全局常量。interface Player { // 等价于 public static final String VERSION 2.0; String VERSION 2.0; }特点省略修饰符也会自动补全无法定义普通成员变量不能提供 setter 修改值。2. 抽象方法Java7 及之前唯一方法默认修饰符public abstract无方法体实现类必须重写。interface Player { // 等价 public abstract void play(); void play(); }3. 默认方法Java8 新增 default用default修饰拥有方法体实现类可以直接继承也可重写解决接口升级后所有实现类大面积报错问题。interface Player { default void stop() { System.out.println(播放器停止播放); } }4. 静态方法Java8 新增 staticstatic修饰只能通过接口名。方法名调用实现类不会继承该静态方法。interface Player { static void printVersion() { System.out.println(播放器版本2.0); } } // 调用方式Player.printVersion();5. 私有方法Java9 新增 private分为私有实例方法、私有静态方法仅接口内部默认 / 静态方法可调用用于抽取接口内部重复逻辑对外隐藏。interface Player { default void logStart() { printLog(开始播放); } private void printLog(String msg) { System.out.println(日志 msg); } }接口成员总结表成员类型默认修饰符核心特性变量public static final常量不可修改、必须赋值抽象方法public abstract无方法体实现类强制重写默认方法public default有方法体可继承可重写静态方法public static接口名调用子类不继承私有方法private仅接口内部使用封装内部逻辑三、接口与抽象类综合对比第 16 节综合案例很多初学者混淆抽象类abstract class和接口interface我们先对比核心区别再用多媒体设备实战案例落地。1. 核心区别关键字抽象类abstract class接口interface继承限制类只能单继承一个抽象类类可多实现多个接口构造方法抽象类有构造器用于子类初始化接口无构造器不能实例化成员变量抽象类可定义普通变量、常量接口只能是static final常量方法权限抽象类可任意权限方法接口方法默认 public设计定位抽象类描述事物共性属性 通用逻辑是什么接口描述扩展行为能力能做什么2. 综合实战案例多媒体设备需求存在电视、手机两种设备都属于电子设备提取抽象父类ElectronicDevice同时部分设备支持播放功能抽取播放接口Playable。步骤 1抽象类 —— 定义电子设备通用属性与基础逻辑// 抽象类描述所有电子设备的共性属性通用方法 abstract class ElectronicDevice { private String brand; // 普通成员变量 public ElectronicDevice(String brand) { this.brand brand; } // 通用普通方法 public void powerOn() { System.out.println(brand 设备开机); } // 抽象方法强制子类实现设备特有功能 public abstract void showInfo(); }步骤 2接口 —— 定义播放扩展能力// 接口只定义播放行为规范和设备本身属性无关 interface Playable { // 抽象方法必须实现 void playVideo(); // 默认方法通用暂停逻辑 default void pauseVideo() { System.out.println(视频暂停); } // 静态工具方法 static void printPlayTip() { System.out.println(支持1080P高清播放); } }步骤 3子类 1—— 电视继承抽象类 实现播放接口// 电视是电子设备同时具备播放能力 public class TV extends ElectronicDevice implements Playable { public TV(String brand) { super(brand); } // 重写抽象类抽象方法 Override public void showInfo() { System.out.println(这是一台电视设备); } // 实现接口抽象方法 Override public void playVideo() { System.out.println(电视播放高清影片); } }步骤 4子类 2—— 收音机仅继承抽象类无播放能力// 收音机是电子设备但不支持播放视频不实现Playable public class Radio extends ElectronicDevice { public Radio(String brand) { super(brand); } Override public void showInfo() { System.out.println(这是一台收音设备); } }步骤 5测试运行public class Test { public static void main(String[] args) { TV tv new TV(小米); tv.powerOn(); tv.showInfo(); tv.playVideo(); tv.pauseVideo(); Playable.printPlayTip(); Radio radio new Radio(德生); radio.powerOn(); radio.showInfo(); } }3. 案例总结抽象类ElectronicDevice统一所有电子设备的品牌、开机逻辑代表事物本身的共性接口Playable作为可选扩展只有需要播放功能的设备才实现代表额外附加能力完美体现开发设计原则抽象类抽取共性接口扩展能力二者搭配实现高扩展、低耦合代码。四、接口开发使用场景总结定义统一规范项目工具类、中间件回调、框架标准如 Comparable 排序接口多能力扩展突破 Java 单继承限制一个类叠加多个接口能力解耦分层面向接口编程业务依赖抽象接口而非具体实现类方便替换底层逻辑回调函数Spring、MyBatis 等框架大量使用接口做回调、监听器。五、常见面试考点接口和抽象类区别结合上文对比表回答接口里可以有什么成员默认修饰符是什么default 默认方法、static 静态方法作用与调用区别一个类可以继承抽象类同时实现多个接口吗接口能 new 实例化吗如何使用接口多态接口引用指向实现类对象结尾接口是 Java 面向对象设计的灵魂理解接口成员规则、分清抽象类与接口定位才能写出符合面向对象思想、易维护可扩展的业务代码。下一章我们将基于接口多态学习面向接口编程的企业分层实战写法。