Java重写具有不同类型的类成员

Java重写具有不同类型的类成员,java,inheritance,overriding,Java,Inheritance,Overriding,我有以下列举: public enum CarManufacturer { VOLKSWAGEN, CHEVROLET, DODGE, ... } public enum PlaneManufacturer { LOCKHEED, AIRBUS, BOEING, ... } 以及以下超类: public class Vehicle { int size; int weight; ... } 我想做的是在车内有一个明确的制造商,这样每个接受车辆类的人都知

我有以下列举:

public enum CarManufacturer {
    VOLKSWAGEN, CHEVROLET, DODGE, ...
}
public enum PlaneManufacturer {
    LOCKHEED, AIRBUS, BOEING, ...
}
以及以下超类:

public class Vehicle {
    int size;
    int weight;
    ...
}
我想做的是在车内有一个明确的制造商,这样每个接受车辆类的人都知道它有一个制造商

例:


最好的方法是什么?

创建一个
制造商
接口,并让您的枚举实现该接口

public interface Manufacturer {}

public enum CarManufacturer implements Manufacturer {
    VOLKSWAGEN, CHEVROLET, DODGE, ...
}
public enum PlaneManufacturer implements Manufacturer {
    LOCKHEED, AIRBUS, BOEING, ...
}
然后在
车辆
类中,您可以:

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

    Manufacturer getManufacturer () {
        return manufacturer;
    };
}

每个枚举都隐式地从枚举抽象超类扩展而来。因此,您可以在车辆超类中将属性引用为Enum,如中所示:

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

        abstract Enum getManufacturer () {};
    }

但是这并不能阻止某人在制造商应该在的地方使用他们的enum
Fruit
。并且您希望在返回的对象上有类似于
manufacture
的方法,而enum没有。
    public class Vehicle {
        int size;
        int weight;
        Enum manufacturer;

        abstract Enum getManufacturer () {};
    }