簡體   English   中英

創建另一個子類java的構造函數

[英]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 Jeepnew Sedanif( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM