Java 覆盖不同类型的类成员

标签 java inheritance overriding

我有以下枚举:

public enum CarManufacturer {
    VOLKSWAGEN, CHEVROLET, DODGE, ...
}
public enum PlaneManufacturer {
    LOCKHEED, AIRBUS, BOEING, ...
}

和以下父类(super class):

public class Vehicle {
    int size;
    int weight;
    ...
}

我想做的是在车辆内部有一个明确的制造商,这样每个收到 Vehicle 类的人都知道它有一个制造商。

例如:

public class Vehicle {
    int size;
    int weight;
    int manufacturer;

    abstract int getManufacturer () {};
}

public class Plane extends Vehicle {
    PlaneManufacturer manufacturer;
    PlaneManufacturer getManufacturer () { return this.manufacturer; }
    ...
}
public class Car extends Vehicle {
    CarManufacturer manufacturer;
    CarManufacturer getManufacturer () { return this.manufacturer; }
    ...
}

执行此操作的最佳方法是什么?

最佳答案

创建一个 Manufacturer 接口(interface),并让您的枚举实现该接口(interface)。

public interface Manufacturer {}

public enum CarManufacturer implements Manufacturer {
    VOLKSWAGEN, CHEVROLET, DODGE, ...
}
public enum PlaneManufacturer implements Manufacturer {
    LOCKHEED, AIRBUS, BOEING, ...
}

然后在您的 Vehicle 类中,您可以:

public class Vehicle {
    int size;
    int weight;
    Manufacturer manufacturer;

    Manufacturer getManufacturer () {
        return manufacturer;
    };
}

关于Java 覆盖不同类型的类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25926671/

相关文章:

ios - 将继承 Realm 对象合并在一起

java - Spring JPA - 实体分离?关于异常(exception)情况?

java - 如何在java android中排序后对json值求和?

java - ImageIcon 未显示在 JPanel 中

java - 需要帮助编译此迭代和接口(interface)程序

javascript - AngularJS 中范围原型(prototype)/原型(prototype)继承的细微差别是什么?

java - 无法访问数组java中的对象

javascript - 在 JavaScript 中重写原型(prototype)函数的内部函数

java - 在java中重写类

Java FileOutputStream 访问已签名的小程序被拒绝