Java接口是一种完全抽象的类,它定义了一组方法的签名(没有方法体),用于规范类的行为。接口使用interface关键字定义,类通过implements关键字实现接口。
接口的特点:
- 接口中的方法默认是public abstract的
- 接口中的变量默认是public static final的
- 接口不能包含构造方法
- 从Java 8开始,接口可以包含默认方法和静态方法
- 从Java 9开始,接口可以包含私有方法
接口在Java中起到了定义标准的作用。当多个类需要遵循相同的行为规范时,可以使用接口来定义这些规范。
示例:`java
// 定义数据库连接标准
public interface DatabaseConnection {
void connect();
void disconnect();
boolean isConnected();
}
// MySQL实现
public class MySQLConnection implements DatabaseConnection {
public void connect() {
// MySQL连接逻辑
}
public void disconnect() {
// MySQL断开逻辑
}
public boolean isConnected() {
// 检查连接状态
return true;
}
}`
工厂模式使用接口来创建对象,而无需向客户端暴露创建逻辑。
简单工厂模式示例:`java
// 产品接口
public interface Shape {
void draw();
}
// 具体产品
public class Circle implements Shape {
public void draw() {
System.out.println("绘制圆形");
}
}
public class Rectangle implements Shape {
public void draw() {
System.out.println("绘制矩形");
}
}
// 工厂类
public class ShapeFactory {
public Shape getShape(String shapeType) {
if (shapeType == null) return null;
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
}`
代理模式通过接口为其他对象提供代理或占位符,以控制对这个对象的访问。
静态代理示例:`java
// 接口
public interface Image {
void display();
}
// 真实对象
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName) {
this.fileName = fileName;
loadFromDisk();
}
private void loadFromDisk() {
System.out.println("从磁盘加载图片: " + fileName);
}
public void display() {
System.out.println("显示图片: " + fileName);
}
}
// 代理对象
public class ProxyImage implements Image {
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName) {
this.fileName = fileName;
}
public void display() {
if (realImage == null) {
realImage = new RealImage(fileName);
}
realImage.display();
}
}`
核心区别:
| 特性 | 抽象类 | 接口 |
|------|--------|------|
| 方法实现 | 可以有具体方法 | 只能有抽象方法(Java 8前) |
| 变量 | 可以有各种变量 | 只能是常量 |
| 构造方法 | 可以有 | 不能有 |
| 继承 | 单继承 | 多实现 |
| 设计目的 | 代码复用 | 定义规范 |
选择原则:
- 当需要定义模板方法或代码复用时,使用抽象类
- 当需要定义行为规范或实现多态时,使用接口
- 优先使用接口,因为Java支持多接口实现
在GoF设计模式中,接口扮演着至关重要的角色:
接口作为Java面向对象编程的重要特性,不仅提供了代码规范,更是设计模式实现的基石。掌握接口的使用,能够写出更加灵活、可扩展的代码。
如若转载,请注明出处:http://www.zhongshenwangdun.com/product/42.html
更新时间:2026-01-13 07:47:53