簡體   English   中英

Java - 調用構造函數時如何使用類屬性中的值

[英]Java - how to use a value from a class property when calling a constructor

我有以下問題:

  1. 構建類AnimalCatBug
  2. 在相關和必要的類上定義屬性colorleg_number 讓它們在構造函數中初始化。
  3. 添加允許我們使用CatBug類調用方法move的功能。 讓該方法返回一個字符串“我正在用leg_number腿移動!”,其中“ leg_number ”是leg_number中設置的leg_number
  4. 添加一個名為Bird的新類。 添加屬性wing_number 添加允許我們使用Bird類調用方法move的功能。 讓該方法返回字符串“我正在用leg_number腿移動!” 如果wing_number沒有適用的值。 如果wing_number確實具有適用的值,則返回字符串“我正在飛行”。

到目前為止,我的代碼如下:

class Animal {

    protected String color;
    protected int leg_number;

    public Animal(String color, int leg_number) {
        this.color = color;
        this.leg_number = leg_number;
    }

    public void move() {
        System.out.println("I'm moving with " + leg_number + " legs!");
    }
}

class Cat extends Animal {
    String color;
    int leg_number;

    public Cat(String color, int leg_number) {
        super(color, leg_number);
        this.color = "orange";
        this.leg_number = 4;
    }

    @Override
    public void move() {
        System.out.println("I'm moving with " + leg_number + " legs!");
    }
}

class Bug extends Animal {
    String color;
    int leg_number;

    public Bug(String color, int leg_number) {
        super(color, leg_number);
        this.color = "green";
        this.leg_number = 16;
    }

    @Override
    public void move() {
        System.out.println("I'm moving with " + leg_number + " legs!");
    }
}

class Bird extends Animal {
    String color;
    int leg_number;
    int wing_number;

    public Bird(String color, int leg_number, int wing_number) {
        super(color, leg_number);
        this.color = "yellow";
        this.leg_number = 2;
        this.wing_number = wing_number;
    }

    public void move(int wing_number) {
        if (wing_number > 0) {
            System.out.println("I'm flying");
        } else {
            System.out.println("I'm moving with " + leg_number + " legs!");
        }
    }
}

我想我按照說明在構造函數中設置 leg_number 的值做了什么。 不過,我不確定如何在構造函數調用中使用它。 看來,如果我有Animal myCat = new Cat("orange", 4); 我沒有按照作業的說明進行操作。 但我不知道還有什么可以放在那里。 我試過使用(color, leg_number)(this.color, this.leg_number) ,但正如預期的那樣,它們不起作用(我假設是因為對象尚未實例化)。 我嘗試在構造函數本身的參數列表中設置值,但這也不起作用。 我嘗試讓構造函數不帶參數,但我必須調用確實需要參數的super構造函數,所以我會以這種方式得到錯誤。

我在這里缺少什么?

編輯:我試圖在 Main 方法中實例化這些。

您的子類中不需要String colorint leg_number 您也不需要覆蓋所有子類中的move()方法,除了Bird 此外,您在Bird move()方法不應采用任何參數,而應使用wing_number屬性。 話雖如此,請嘗試以下操作:

class Animal {

    protected String color;
    protected int leg_number;

    public Animal(String color, int leg_number) {
        this.color = color;
        this.leg_number = leg_number;
    }

    public void move() {
        System.out.println("I'm moving with " + leg_number + " legs!");
    }
}
class Cat extends Animal {
    public Cat(String color, int leg_number) {
        super(color, leg_number);
    }
}
class Bug extends Animal {
    public Bug(String color, int leg_number) {
        super(color, leg_number);
    }
}
class Bird extends Animal {
    private int wing_number;

    public Bird(String color, int leg_number, int wing_number) {
        super(color, leg_number);
        this.wing_number = wing_number;
    }

    @Override
    public void move() {
        if (wing_number > 0) {
            System.out.println("I'm flying");
        } else {
            super.move();
        }
    }
}

暫無
暫無

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

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