Java中如何为Vehicle子类Bus、Tram实现各自静态capacity属性
Java实现子类共享静态容量属性的设计方案
核心思路
父类Vehicle无需维护实例级别的capacity属性,而是定义抽象方法统一对外的容量获取接口,让子类自行实现类级别的静态容量逻辑。这样每个子类的所有实例共享同一静态容量值,不同子类可设置不同的容量。
代码实现
1. 抽象父类Vehicle
定义抽象方法getCapacity(),规范子类的容量获取行为:
public abstract class Vehicle { public abstract int getCapacity(); }
2. Bus子类实现
使用静态属性存储所有Bus实例共享的容量,实现父类抽象方法返回该静态值:
public class Bus extends Vehicle { // 静态属性:所有Bus实例共享同一容量 private static int capacity; // 可选:提供静态方法修改容量(根据业务需求决定是否开放) public static void setCapacity(int newCapacity) { Bus.capacity = newCapacity; } @Override public int getCapacity() { return capacity; } }
3. Tram子类实现
与Bus逻辑一致,独立维护自身的静态容量:
public class Tram extends Vehicle { private static int capacity; public static void setCapacity(int newCapacity) { Tram.capacity = newCapacity; } @Override public int getCapacity() { return capacity; } }
使用示例
public class Main { public static void main(String[] args) { // 配置Bus的容量为50 Bus.setCapacity(50); Bus busA = new Bus(); Bus busB = new Bus(); System.out.println(busA.getCapacity()); // 输出50 System.out.println(busB.getCapacity()); // 输出50 // 配置Tram的容量为80 Tram.setCapacity(80); Tram tramX = new Tram(); Tram tramY = new Tram(); System.out.println(tramX.getCapacity()); // 输出80 System.out.println(tramY.getCapacity()); // 输出80 } }
扩展:固定不可修改的容量
如果业务中容量无需动态修改,可将静态属性设为final,通过静态初始化赋值:
public class Bus extends Vehicle { // 固定容量,所有Bus实例共享且不可修改 private static final int CAPACITY = 50; @Override public int getCapacity() { return CAPACITY; } }
内容的提问来源于stack exchange,提问作者Michał Stachurski
相关产品推荐
相关产品推荐

