以下是我的原始問題的玩具問題。 Bird
是一個接口。 Cardinal
是Point
的子類,它實現Bird
接口。 Aviary
類執行實施。如何在子類的實例方法中返回超類對象?
問:我應該把什麼在getPosition()
實例方法使得Aviary
類正確攜帶getPosition()
方法?
如果bird
接口中的抽象方法編碼錯誤,請糾正我的錯誤。
public interface Bird{
public Point getPosition();
}
public class Point{
private int x;
private int y;
// Constructs a new Point at the given initial x/y position.
public Point(int x, int y){
this.x = x;
this.y = y;
}
// Returns the x-coordinate of this point
public int getX(){
return x;
}
// Returns the y-coordinate of this Point
public int getY(){
return y;
}
}
問題是,在下面的代碼:
public class Cardinal extends Point implements Bird{
// Constructors
public Cardinal(int x , int y){
this(x,y);
}
// not sure how to write this instance method
public Point getPosition(){
???????????
}
}
public class Aviary{
public static void main(String[] args){
Bird bird1 = new Cardinal(3,8);
Point pos = bird1.getPosition();
System.out.println("X: " + pos.getX() + ", Y: " + pos.getY());
}
}
在getPosition()中,寫下:return this – pd30 2014-09-25 04:13:54
爲什麼'Cardinal'是'Point'?不應該使用'Cardinal'實例來使用'Point'實例變量來跟蹤它的位置嗎?如果代碼期望某個位置有鳥,那將是非常令人驚訝的。 – user2357112 2014-09-25 04:15:42
'Cardinal'是''Point''嗎?這是要檢查繼承是否有意義的典型問題。另一方面,說「紅衣主教的位置是一個點」是完全合理的。這意味着使用組合代替更合理。爲此,只需在'Cardinal'類中添加一個'Point'成員變量即可。更好的做法是讓'Bird'成爲一個具有'Point'成員變量的抽象類,因爲**每個**都有一個位置。 – 2014-09-25 04:16:59