java - 创建另一个子类java的构造函数

标签 java inheritance constructor

如果我有一辆汽车:

public class Car {

    int weight;
    Car(){}

    public Car(int weight) {
        this.weight = weight;
    }
}

和另一个继承自 Car 的 Sedan 类:

 public class Sedan extends Car { 

     public Sedan(int weight) {
         super(weight);
     }
 }

还有一辆同样继承自 Car 的三等吉普车:

public class Jeep extends Car {

    public Jeep(int weight) {
        super(weight);
    }
} 

当我说 Car mercedes = new Car(5000);

我怎样才能做到

构造函数根据给定的重量创建new Jeepnew Sedan:if(weight>3000),创建Jeep mercedes=new Jeep(weight); ,否则创建轿车 mercedes=new Sedan(weight);

最佳答案

您似乎想使用 factory pattern .这意味着您创建单独的类,负责构建和返回相应的 Car 对象。

例如:

class CarFactory {
    public Car createCar(int weight) {
         if (weight < 3000) {
              return new Sedan(weight);
         } else {
              return new Jeep(weight);
         }
    }
}

用法:

CarFactory carFactory = new CarFactory();
Car car = carFactory.createCar(yourDesiredWeight);

这不仅可以帮助您解决问题,还可以帮助您更好地组织代码。 IE。消除了从将与类一起操作的类中创建汽车的责任。

注意:我强烈建议您继续阅读 single responsibility principle (SRP, for short) .

注意 2:Car 似乎需要抽象,因为它是所有派生类型的通用基类,如果直接初始化则没有意义(public抽象类汽车 {...}).

关于java - 创建另一个子类java的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229814/

相关文章:

C++实现计算派生类实例的基类

c++ - 返回派生类型实例的 CRTP 和函数

java - 为什么在 Constructor 和 Setters 中使用 "this"关键字?

javascript - 构造函数风格的银行余额工具

C++ - 析构函数的调用次数超过预期

基于 Java 接口(interface)的多态性未被调用

java - 使用二维数组在java中创建文本边框

java - ivy:使用分类器从 maven 安装

java - 为什么我们可以在Java中更改只读文件的文件属性?

ios - Swift SKSpriteNode 类未将触摸注册到 GameScene