加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 03:16:13 所属栏目:Java 来源:网络整理
导读:Java – 是否可以使用单个类扩展类的所有子类? 让我们用一个例子来解释它,实际的代码要复杂得多.我有一个Animal类,它有自己的类层次结构.假设它有两个子类:Testarrosa和Viper. public class Car { public abstract String getManufacturer();}public class
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,虽然我不知道现在的时尚如何,但你所描述的可能是一个跨领域的问题.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读