簡體   English   中英

Java子類構造函數分配值

[英]Java Subclass Constructor Assigning Values

我正在嘗試使用子類的構造函數創建對象,但無法在子類的構造函數中為該對象分配值。

這是超類。

public class Bike
{
    String color = "";
    String type = "";
    int age = 0;

    public static void main (String [] args)
    {
    }

    public Bike (String s, int i)           // Constructor
    {
        color = s;
        age = i;
    }

    public void PrintBike ()
    {
        if (type == "")
        {
            System.out.print(" You didn't give the proper kind of bike."); 
        }
        else
        {
            System.out.print(" Your bike is a " + type + " bike. \n");
        }
    }
}

這是子類。

public class BikeAdv extends Bike
{
    private String type;

    public BikeAdv (String color, int age, String BikeType)
    {
        super (color, age);
        type = BikeType;
    }
 }

這是調用構造函數的類。

public class Green
{
    public static void main (String [] args)
    {
        Bike greenBike = new BikeAdv ("Green", 20, "Mountain");
        greenBike.PrintBike();
    }
}

當我運行“綠色”類時,輸出為“您沒有給正確類型的自行車”。 而我希望看到“您的自行車是山地自行車”。

謝謝!

type的子場陰影的type的超類領域。 超類中的字段永遠不會被填充,這就是被檢查的字段。

如果僅刪除子類中的字段,則那里的賦值將填充超類字段,並且您的代碼可能會按預期工作。

但是,正如在其他答案中指出的那樣,最好根據您的需要將字段設置為私有或受保護,而不是默認可見性。

Bike類不是抽象的也不是接口,這意味着它的所有方法都與Bike類中所說的一樣。 當您將greenBike分配為Bike而不是BikeAdv時,您告訴它使用Bike類而不是BikeAdv類中的方法。 最好的選擇是使Bike抽象化,並使PrintBike保持空無主體。

另外:永遠不要將BikeType字符串傳遞給超類,因此它無法接收它。

您已聲明這些屬性而沒有明確的可見性:

    String color = "";
    String type = "";
    int age = 0;

此外,你必須type在重新聲明BikeAdv ,這可能是一個錯誤(你不需要)。

如果要僅從其類訪問這些屬性,則應將它們聲明為private 但是,在這種情況下,您必須對構造函數進行參數化,以便能夠修改所有這些構造函數。 或者也許為他們創建setter(請注意,這樣一來,您將在課堂之外授予訪問權限)。

    private String color = "";
    private String type = "";
    private int age = 0;

如果您希望它們不能從其類外部進行修改,而可以從其子類進行訪問,則將它們聲明為受保護的:

    protected String color = "";
    protected String type = "";
    protected int age = 0;

如您所見,有很多可能性。 在這里查看它們:

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

暫無
暫無

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

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