Java - 是否可以使用单个类扩展类的所有子类?
让我们用一个例子来解释它,实际的代码要复杂得多.我有一个Animal类,它有自己的类层次结构.假设它有两个子类:Testarrosa和Viper.
public class Car {
    public abstract String getManufacturer();
}
public class Testarossa extends Car{
    public String getManufacturer(){
        return "Ferrari";
    }
}
public class Viper extends Car{
    public String getManufacturer(){
        return "Dodge";
    }
}
我想用RegisteredCar子类扩展所有Car子类.
public class RegisteredCar extends Car {
   private String plateNumber;
   public RegisteredCar (String plateNumber){
       this.plateNumber=plateNumber;
   }
   public String getPlateNumber() {
       return plateNumber;
   }
}
在某些时候,我应该能够创建一个特定子类的新RegisteredCar.就像是
RegisteredCar c = new RegisteredCar<Viper>("B-3956-AC");
并调用c.getManufacturer()获取"Dodge"和c.getPlateNumber()以获得B-3956-AC.显然,我仍然可以创建一个Car c = new Viper();
这是一个例子.如果没有注册,在Car中具有空值的属性不足以满足我的需要.
Rob*_*gam 10
简而言之,这是不可能的.不幸的是,您必须修改对象模型.
例如,以Registration这种方式拥有一个类:
public interface Registration<C extends Car> {
    C getCar();
    String getPlateNumber();
}
这样,您可以在保持Car模型的同时,在单个班级中提取与注册相关的信息.
然后你可以做辅助方法,如:
Registration<Viper> registeredViper = createRegistration(new Viper(), "B-3956-AC");
正如其他人所说,不,这实际上不可能,您的示例可以通过更改模型来解决
作为继承的替代方法,您可以使用另一个类来包装Car实例。
我会创建Car一个接口(尽管RegisteredCar扩展Car也应该起作用),然后尝试类似以下伪代码的操作:
class RegisteredCar<T extends Car> implements Car {
   private final  T car
   RegisteredCar(T car) {
     this.car = car;
   }
   ... methods for RegisteredCar
   ... methods from Car delegating to `this.car`
}
请原谅有些糟糕的代码,我没有打开 IDE,而且我总是在没有 IDE 的情况下搞乱泛型。
另一个可能的解决方案是使用 AOP,尽管我不知道现在流行的如何,但您所描述的可能是一个横切问题。
最后的替代方案可能是使用允许扩展、特征、协议或某种其他类型“混合”的语言
| 归档时间: | 
 | 
| 查看次数: | 570 次 | 
| 最近记录: |