簡體   English   中英

未給出預期結果的類的方法

[英]Method of a class not giving expected result

我寫了以下3段代碼:

驅動程序.java:

package herds;

public class Driver {
    public static void main(String [] args) {
        organism Wolf = new organism(1,2);
        System.out.println(Wolf.toString());
        Wolf.move(1,2);
        System.out.println(Wolf.toString());
        
        dog Bobby = new dog(0,3,"Bobby");
        System.out.println(Bobby.bark());
        System.out.println(Bobby.toString());
        Bobby.move(0, 1);
        System.out.println(Bobby.toString());
    }
}

有機體.java

package herds;

public class organism {
    int x; 
    int y;
    
    public organism(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    public String toString() {
        return "x: " + this.x + ";" + "y: " + this.y;           
    }

    public void move(int dx, int dy) {
        this.x = this.x + dx;
        this.y = this.y + dy;
    }
}

狗.java:

package herds;

public class dog extends organism {
    int x; 
    int y;
    String name;
    
    public dog(int x, int y, String name) {
        super(x, y);
        this.name = name;
    }
    
    public String bark() {
        return this.name +  " says Woof";
    }
    
    @Override
    public void move(int dx, int dy) {
        this.x = dx;
        this.y = dy;
    }
}

我遇到的問題是驅動程序文件的輸出。 具體來說,它給出了以下輸出:

x: 1;y: 2
x: 2;y: 4
Bobby says Woof
x: 0;y: 3
x: 0;y: 3

我不明白為什么最后一行是x: 0;y: 3 ,而不是x: 0;y: 1 ,因為根據 dog 類的 move 方法的定義, this.x = 0this.x = 0 this.y = 1 那么為什么在調用這個方法之后x: 0y: 3呢?

  1. 您將xy隱藏在dog類中。

  2. 當你在move方法中更新它們時,你在dog類中更新它們。

  3. 但是toString方法從organism類打印。

使固定:

只需從dog類中刪除xy 您可能需要將protected添加到它們在organism類中的定義中。 (也在dog類中從move中刪除this 。說真的,我不喜歡總是將this添加到實例變量的風格。)

public class dog extends organism {
    //int x; 
    //int y;
    String name;

暫無
暫無

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

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