[英]constructor that creates another Subclass java
如果我有汽車課:
public class Car {
int weight;
Car(){}
public Car(int weight) {
this.weight = weight;
}
}
還有另一個從Car繼承的轎車轎車:
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 Jeep
或new Sedan
: if( weight>3000)
,創建一個Jeep 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);
}
}
}
用法:
CarFactory carFactory = new CarFactory();
Car car = carFactory.createCar(yourDesiredWeight);
這不僅可以幫助您解決問題,而且可以幫助您以更好的方式組織代碼。 即,免除了在課堂上制造汽車的責任,因為它將與課堂一起操作。
注意:我強烈建議您閱讀單一職責原則(簡稱SRP) 。
注意2:似乎Car
類需要是抽象的,因為它是所有派生類型的通用基類,並且如果直接初始化則沒有任何意義( public abstract class Car {...}
)。
您無法按照自己的意願進行操作。 您正在尋找的是抽象工廠模式
public abstract class AbstractCarFactory{
public static Car createCar(int weight){
Car ret=null;
if (weight>3000) {
car=new Jeep(weight);
} else {
car=new Sedan(weight);
}
return 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類將構造Jeep或Sedan,並委派所有對它的調用。
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);
要么
Car somecar = new Sedan (1000);
但到頭來都是車
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.