В учебнике Java есть example of "Implementing an Interface". Я повторил этот пример, но он не работает. NetBeans показывает ошибку в тексте слева от объявления класса RectanglePlus
. И ошибка состоит в том:Класс, который реализует интерфейс, не работает, потому что «класс не абстрактный и не переопределяет абстрактный метод ...». Какая ошибка?
rectangleplus.RectanglePlus не является абстрактным и не отменяет абстрактный метод isLargerThan (rectangleplus.Relatable) в rectangleplus.Relatable
Я сделал то же самое, как написано в учебнике. Почему это показывает ошибку? Вот моя реализация проекта.
- Название проекта:
RectanglePlus
. - Название пакета:
rectangleplus
.
первого файла в проекте интерфейса Relatable
:
package rectangleplus;
public interface Relatable {
int isLarger(Relatable other);
}
второй файл в проекте Main Class RectanglePlus
с помощником класса Point
:
package rectangleplus;
public class RectanglePlus implements Relatable {
public int width = 0;
public int height = 0;
public Point origin;
// four constructors
public RectanglePlus() {
origin = new Point(0, 0);
}
public RectanglePlus(Point p) {
origin = p;
}
public RectanglePlus(int w, int h) {
origin = new Point(0, 0);
width = w;
height = h;
}
public RectanglePlus(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}
// a method for moving the rectangle
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}
// a method for computing
// the area of the rectangle
public int getArea() {
return width * height;
}
// a method required to implement
// the Relatable interface
public int isLargerThan(Relatable other) {
RectanglePlus otherRect
= (RectanglePlus)other;
if (this.getArea() < otherRect.getArea())
return -1;
else if (this.getArea() > otherRect.getArea())
return 1;
else
return 0;
}
public static void main(String[] args) {
// TODO code application logic here
}
}
class Point {
int top;
int left;
int x;
int y;
public Point(int t, int l) {
top = t;
left = l;
}
}
Почему ничего не сказано о абстракции в примере с учебником? Должен ли учебный пример работать без митов?
спасибо.
просто комментарий: не позволяйте методу 'is'XYZ возвращать значение' int'. 'is'-methods должны возвращать' boolean '. если вы хотите вернуть 'int', вызовите ваш метод' compare' – gefei