Следующая проблема с игрушкой моей оригинальной проблемы. 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
Почему «кардинал» является «точкой»? Не следует ли вместо экземпляра «Cardinal» использовать переменную экземпляра «Point», чтобы отслеживать ее местоположение? Было бы удивительно, если бы код, ожидающий места, получил птицу. – user2357112
Является ли «кардинал» «точкой»? Это типичный вопрос, который нужно попросить проверить, имеет ли смысл наследование. С другой стороны, имеет смысл сказать: «У кардинала есть позиция, которая является точкой». Это означает, что имеет смысл использовать композицию вместо этого. Для этого просто добавьте переменную члена «Point» в класс «Cardinal». Еще лучше сделайте 'Bird' абстрактным классом с переменной' Point', так как ** каждая ** птица имеет позицию. –