Java – 是否可以使用单个类扩展类的所有子类?

前端之家收集整理的这篇文章主要介绍了Java – 是否可以使用单个类扩展类的所有子类?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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中具有空值的属性不足以满足我的需要.

解决方法

正如其他人所说的那样,没有那些不太可能,你的例子可以通过改变你的模型来解决

作为继承的替代方法,您可以使用另一个类来包装Car实例.
我会让Car成为一个接口(虽然注册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,虽然我不知道现在的时尚如何,但你所描述的可能是一个跨领域的问题.

最后的替代方案可能是使用允许扩展,特征,协议或其他类型的“混合”的语言

猜你在找的Java相关文章