簡體   English   中英

Java錯誤創建子類構造函數

[英]Java error creating subclass constructor

我試圖學習一些Java,卻一直無法創建子類。 我不斷收到錯誤消息。 There is no default constructor available in...

這是代碼:

class Car 
{
    String name;
    int speed;
    int gear;
    int drivetrain;
    String direction;
    String color;
    String fuel;

    public Car(String carName, int carSpeed, String carDirection, String carColor, int carDriveTrain, int carGear)
    {
        name = carName;
        speed = carSpeed;
        gear = carGear;
        drivetrain = carDriveTrain;
        direction = carDirection;
        color = carColor;
        fuel = "Gas";
    }

    void shiftGears(int newGear){gear = newGear; }
    void accelerateSpeed(int acceleration){speed = speed + acceleration;  }
    void applyBrake(int brakingFactor){ speed = speed - brakingFactor;}
    void turnWheel(String newDirection){ direction = newDirection; }

}//end of Car class

class Suv extends Car
{

    void applyBrake(int brakingFactor)
    {
        super.applyBrake(brakingFactor);
        speed = speed - brakingFactor;

    }
}

當我嘗試創建“ Suv”子類時,問題就來了。 我究竟做錯了什么? 謝謝!

由於“ Car”具有構造函數,因此從Car派生的任何子類也需要構造函數。 因此,首先您需要在Suv類中放置一個構造函數。

例:

class Suv extends Car {
    public Suv() {
        super( /* here you need to pass arguments to create a car */);
        // any other constructor code
    }
}

你可能想創建下面的構造Suv那initialzies該參數的Car構造函數:

public Suv(String carName, int carSpeed, String carDirection, String carColor, int carDriveTrain, int carGear)
{
    super (carName, carSpeed, carDirection, carColor, carDriveTrain,carGear);
}

另一種方法是向Car添加無參數構造函數,在這種情況下, Sub的默認構造函數將調用該構造函數:

public Car()
{

}

將以下構造函數添加到Car

public Car(){}

問題是, Suv不能因為為了運行創建Suv的默認構造函數的構造函數Car需要先跑去, Car只接受參數,以便它不能被用來作為默認的構造函數的構造函數。

另一種方法是,作為@Markus建議,以實現在構造函數Suv即會打電話給super了所有必需的參數。 無論哪種方式,主要思想是為了實例化Suv我們需要首先能夠實例化Car否則我們將得到編譯器錯誤。

我建議不要將SUV類放在同一文件中。 相反,請在當前程序包中創建另一個類,將其命名為SUV,對其進行擴展,並通過以下兩種語法之一調用超類構造函數:

super(); //calls the superclass no-argument constructor with no parameter list

要么

super(parameter list); //calls the superclass constructor with a matching parameter list

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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