实现接口的类不起作用,因为“Class不是抽象的,不会覆盖抽象方法......”。这是什么错误?

时间:2012-05-15 13:48:50

标签: java interface interface-implementation

Java教程中有一个example of "Implementing an Interface"。我重复了这个例子,但它不起作用。 NetBeans显示RectanglePlus类声明左侧的错误。错误是:

  

rectangleplus.RectanglePlus不是抽象的,不会覆盖   抽象方法isLargerThan(rectangleplus.Relatable)中   rectangleplus.Relatable

我做的与教程中写的相同。为什么会显示错误?这是我对该项目的实施。

  1. 项目名称为RectanglePlus
  2. 包的名称为rectangleplus
  3. 项目中的第一个文件是Interface Relatable

    package rectangleplus;
    
    public interface Relatable {
       int isLarger(Relatable other);   
    }
    

    项目中的第二个文件是主类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;
       }
    }
    

    为什么教程示例中没有关于抽象的说法?教程示例是否应该在没有故障的情况下工作?

    谢谢。

2 个答案:

答案 0 :(得分:5)

在界面中,您声明了方法isLarger,但在您声明的类isLargerThan中将一个更改为另一个名称,它会正常。

答案 1 :(得分:3)

您未在isLarger()界面中正确实施Relatable方法。重命名isLargerThan(Relatable other)方法,使其如下所示:

@Override
int isLarger(Relatable other) {
}

使用@Override注释是个好主意,它允许您捕获问题中的错误。