2012-05-15 4 views
1

В учебнике Java есть example of "Implementing an Interface". Я повторил этот пример, но он не работает. NetBeans показывает ошибку в тексте слева от объявления класса RectanglePlus. И ошибка состоит в том:Класс, который реализует интерфейс, не работает, потому что «класс не абстрактный и не переопределяет абстрактный метод ...». Какая ошибка?

rectangleplus.RectanglePlus не является абстрактным и не отменяет абстрактный метод isLargerThan (rectangleplus.Relatable) в rectangleplus.Relatable

Я сделал то же самое, как написано в учебнике. Почему это показывает ошибку? Вот моя реализация проекта.

  1. Название проекта: RectanglePlus.
  2. Название пакета: 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; 
    } 
} 

Почему ничего не сказано о абстракции в примере с учебником? Должен ли учебный пример работать без митов?

спасибо.

+1

просто комментарий: не позволяйте методу 'is'XYZ возвращать значение' int'. 'is'-methods должны возвращать' boolean '. если вы хотите вернуть 'int', вызовите ваш метод' compare' – gefei

ответ

5

В интерфейсе вы объявляете метод isLarger, но в классе, который вы объявляете isLargerThan Измените имя на другое, и все будет хорошо.

+0

D'oh. Чем ты :) – Green

3

Вы неправильно реализуете метод isLarger() в интерфейсе Relatable. Переименовать метод isLargerThan(Relatable other) так это выглядит следующим образом:

@Override 
int isLarger(Relatable other) { 
} 

Это хорошая идея, чтобы использовать @Override аннотации, это позволяет отлавливать ошибки, как в вопросе.

 Смежные вопросы

  • Нет связанных вопросов^_^