创建另一个子类java的构造函数
如果我有一辆高级轿车:创建另一个子类java的构造函数,java,inheritance,constructor,Java,Inheritance,Constructor,如果我有一辆高级轿车: public class Car { int weight; Car(){} public Car(int weight) { this.weight = weight; } } 和另一种继承自汽车的高级轿车: public class Sedan extends Car { public Sedan(int weight) { super(weight); } } pu
public class Car {
int weight;
Car(){}
public Car(int weight) {
this.weight = weight;
}
}
和另一种继承自汽车的高级轿车:
public class Sedan extends Car {
public Sedan(int weight) {
super(weight);
}
}
public class Jeep extends Car {
public Jeep(int weight) {
super(weight);
}
}
还有一辆三等吉普车,也是从汽车上继承下来的:
public class Sedan extends Car {
public Sedan(int weight) {
super(weight);
}
}
public class Jeep extends Car {
public Jeep(int weight) {
super(weight);
}
}
当我说梅赛德斯车=新车(5000)时,我怎样才能做到这一点代码>
建造师根据给定的重量创建一辆新吉普车
或新轿车
:如果(重量>3000)
,创建一辆吉普车梅赛德斯=新吉普车(重量)代码>,否则创建一辆轿车梅赛德斯=新轿车(重量)代码> 您似乎想使用。这意味着您要创建单独的类,该类负责构建并返回相应的Car
对象
例如:
class CarFactory {
public Car createCar(int weight) {
if (weight < 3000) {
return new Sedan(weight);
} else {
return new Jeep(weight);
}
}
}
这不仅可以帮助您解决问题,还可以帮助您以更好的方式组织代码。也就是说,免除了从类中创建car的责任,该类将使用类进行操作
注意:我强烈建议您仔细阅读
注2:类Car
似乎需要抽象,因为它是所有派生类型的通用基类,如果直接初始化(公共抽象类Car{…}
),则没有意义。您似乎想使用它。这意味着您要创建单独的类,该类负责构建并返回相应的Car
对象
例如:
class CarFactory {
public Car createCar(int weight) {
if (weight < 3000) {
return new Sedan(weight);
} else {
return new Jeep(weight);
}
}
}
这不仅可以帮助您解决问题,还可以帮助您以更好的方式组织代码。也就是说,免除了从类中创建car的责任,该类将使用类进行操作
注意:我强烈建议您仔细阅读
注2:类Car
似乎需要抽象,因为它是所有派生类型的通用基类,如果直接初始化(公共抽象类Car{…}
),则没有意义。您不能按照自己的意愿执行此操作。你要找的是
添加另一个选项(我不推荐,这是一种糟糕的形式)
您可以将工厂模式合并为委派模式:
public class Car {
private Car car;
protected Car() {
}
public Car(int weight) {
if (weight>3000) {
car=new Jeep(weight);
} else {
car=new Sedan(weight);
}
}
public String getType() {
return car.getType();
}
}
Car类将构造一辆吉普车或轿车,并将所有调用委托给它
public class Jeep extends Car {
int weight;
public Jeep(int weight) {
super();
this.weight = weight;
}
public String getType() {
return "JEEP";
}
}
再说一次,这确实是人为的,不应该这样做。你不能随心所欲地这样做。你要找的是
添加另一个选项(我不推荐,这是一种糟糕的形式)
您可以将工厂模式合并为委派模式:
public class Car {
private Car car;
protected Car() {
}
public Car(int weight) {
if (weight>3000) {
car=new Jeep(weight);
} else {
car=new Sedan(weight);
}
}
public String getType() {
return car.getType();
}
}
Car类将构造一辆吉普车或轿车,并将所有调用委托给它
public class Jeep extends Car {
int weight;
public Jeep(int weight) {
super();
this.weight = weight;
}
public String getType() {
return "JEEP";
}
}
同样,这是人为的,不应该这样做。请记住封装
public class Car{
private int weight ;
public Car(){
}
public Car(int weight){
this.weight = weight;
}
}
如果要实例化一辆汽车,只需执行以下操作:
Car someCar = new Car(Insert Weight Here);
你可以在任何地方打电话。不过,继承通常不是这样使用的。你可能想再澄清一点。通常你会做以下事情:
Car somecar = new Jeep(4000);
或
但它们最终都是汽车请记住封装
public class Car{
private int weight ;
public Car(){
}
public Car(int weight){
this.weight = weight;
}
}
如果要实例化一辆汽车,只需执行以下操作:
Car someCar = new Car(Insert Weight Here);
你可以在任何地方打电话。不过,继承通常不是这样使用的。你可能想再澄清一点。通常你会做以下事情:
Car somecar = new Jeep(4000);
或
但它们最终都是汽车不在建造商范围内。你需要的是一个工厂。(调用相应构造函数的方法)不在构造函数内。你需要的是一个工厂。(一个调用相应构造函数的方法)我知道工厂模式的事情。我想知道这是否可以直接在汽车制造商中完成。谢谢。@user120404您不能更改实例化对象的类型,如果调用了ctor,则表示该对象已实例化。我知道工厂模式的事情。我想知道这是否可以直接在汽车制造商中完成。谢谢。@user120404您不能更改实例化对象的类型,如果调用了ctor,则表示该对象已实例化。