2014-09-19 60 views
1

我有以下枚举:的Java覆盖类成员与不同类型的

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

及以下超:

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

我想要做的是有车所以大家里面明确制造商说收到一个车辆类知道它有一个制造商。

例:

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; } 
    ... 
} 

什么是做到这一点的最好方法是什么?

回答

3

创建一个Manufacturer接口,并让你的枚举实现该接口。

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; 
    }; 
} 
0

每种枚举从枚举抽象超含蓄地延伸。所以,你可以在车辆超引用属性的枚举,如:

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

     abstract Enum getManufacturer() {}; 
    } 
+0

但这并不使用它们枚举'Fruit'其中'Manufacturer'应该阻止别人。 – Jason 2014-09-19 05:12:07

+0

你会希望在返回的对象上有一个像'manufacture'的方法,Enum没有这个方法。 – assylias 2014-09-19 05:19:05