[英]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 = 0
和this.x = 0
this.y = 1
。 那么為什么在調用這個方法之后x: 0
和y: 3
呢?
您將x
和y
隱藏在dog
類中。
當你在move
方法中更新它們時,你在dog
類中更新它們。
但是toString
方法從organism
類打印。
使固定:
只需從dog
類中刪除x
和y
。 您可能需要將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.