use*_*404 1 java inheritance constructor
如果我有班车:
public class Car {
int weight;
Car(){}
public Car(int weight) {
this.weight = weight;
}
}
Run Code Online (Sandbox Code Playgroud)
还有另一个继承自Car的轿车:
public class Sedan extends Car {
public Sedan(int weight) {
super(weight);
}
}
Run Code Online (Sandbox Code Playgroud)
和继承自汽车的第三级吉普车:
public class Jeep extends Car {
public Jeep(int weight) {
super(weight);
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能这样说,当我说 Car mercedes = new Car(5000);
构造函数创建一个new Jeep或一个new Sedan取决于给定的权重:if( weight>3000),创建一个吉普车mercedes=new Jeep(weight);,否则创建一个轿车mercedes=new Sedan(weight);?
看来你想使用工厂模式.这意味着您创建单独的类,负责构建和返回相应的Car对象.
例如:
class CarFactory {
public Car createCar(int weight) {
if (weight < 3000) {
return new Sedan(weight);
} else {
return new Jeep(weight);
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
CarFactory carFactory = new CarFactory();
Car car = carFactory.createCar(yourDesiredWeight);
Run Code Online (Sandbox Code Playgroud)
这不仅可以帮助您解决问题,还可以帮助您以更好的方式组织代码.即删除了将从类操作的类创建汽车的责任.
注意:我强烈建议您阅读单一责任原则(简称SRP).
注2:似乎类Car需要是抽象的,因为它是所有派生类型的通用基类,并且如果直接初始化(public abstract class Car {...})则没有意义.