java如何扩展
扩展 Java 的方法
Java 的扩展可以通过多种方式实现,包括使用继承、接口、抽象类、组合和设计模式等。以下是几种常见的扩展方法:
继承
继承是 Java 中扩展类的常见方式。通过继承,子类可以复用父类的代码并添加新的功能或覆盖父类的方法。
class Parent {
void display() {
System.out.println("Parent class method");
}
}
class Child extends Parent {
@Override
void display() {
System.out.println("Child class method");
}
}
接口
接口允许定义一组方法规范,类可以通过实现接口来扩展功能。Java 支持多接口实现,提供了更大的灵活性。

interface Animal {
void eat();
}
class Dog implements Animal {
@Override
public void eat() {
System.out.println("Dog eats meat");
}
}
抽象类
抽象类介于普通类和接口之间,可以包含抽象方法和具体方法。子类通过继承抽象类并实现其抽象方法来扩展功能。
abstract class Shape {
abstract void draw();
}
class Circle extends Shape {
@Override
void draw() {
System.out.println("Drawing a circle");
}
}
组合
组合是通过将其他类的实例作为成员变量来扩展功能。这种方式比继承更灵活,避免了继承的紧耦合问题。

class Engine {
void start() {
System.out.println("Engine started");
}
}
class Car {
private Engine engine;
Car() {
engine = new Engine();
}
void start() {
engine.start();
}
}
设计模式
设计模式如装饰器模式、策略模式等可以用于动态扩展功能。装饰器模式允许在不修改原有类的情况下动态添加功能。
interface Coffee {
double getCost();
String getDescription();
}
class SimpleCoffee implements Coffee {
@Override
public double getCost() {
return 1.0;
}
@Override
public String getDescription() {
return "Simple coffee";
}
}
class MilkDecorator implements Coffee {
private Coffee coffee;
MilkDecorator(Coffee coffee) {
this.coffee = coffee;
}
@Override
public double getCost() {
return coffee.getCost() + 0.5;
}
@Override
public String getDescription() {
return coffee.getDescription() + ", milk";
}
}
注解
Java 注解可以用于扩展代码的行为或提供元数据。框架如 Spring 和 Hibernate 广泛使用注解来扩展功能。
@Override
public String toString() {
return "Overridden toString method";
}
动态代理
动态代理允许在运行时动态创建代理类,用于扩展对象的行为,如日志记录、事务管理等。
interface Service {
void serve();
}
class RealService implements Service {
@Override
public void serve() {
System.out.println("Real service serving");
}
}
class DynamicProxyHandler implements InvocationHandler {
private Object realObject;
DynamicProxyHandler(Object realObject) {
this.realObject = realObject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before method call");
Object result = method.invoke(realObject, args);
System.out.println("After method call");
return result;
}
}
Service proxy = (Service) Proxy.newProxyInstance(
Service.class.getClassLoader(),
new Class[] { Service.class },
new DynamicProxyHandler(new RealService())
);
proxy.serve();
这些方法可以根据具体需求选择,以实现 Java 代码的灵活扩展。






