1

Javaチュートリアルに「インターフェースの実装」の例があります。この例を繰り返しましたが、うまくいきません。RectanglePlusNetBeans は、クラス宣言の左側に誤りを示しています。そして間違いは:

rectangleplus.RectanglePlus は抽象ではなく、rectangleplus.Relatable の抽象メソッド isLargerThan(rectangleplus.Relatable) をオーバーライドしません。

私はチュートリアルに書かれているのと同じことをしました。なぜそれは間違いを示していますか?これが私のプロジェクトの実装です。

  1. プロジェクトの名前は ですRectanglePlus
  2. パッケージの名前はrectangleplus.

プロジェクトの最初のファイルは InterfaceRelatableです:

package rectangleplus;

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

プロジェクトの 2 番目のファイルは、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;
   }
}

チュートリアルの例で抽象化について何も言われていないのはなぜですか? チュートリアルの例は、問題なく動作するはずですか?

ありがとうございました。

4

2 に答える 2

5

インターフェースではメソッドを宣言しますisLargerが、クラスではisLargerThan一方を他方の名前に変更すると宣言するとうまくいきます。

于 2012-05-15T13:50:47.683 に答える
3

isLarger()インターフェイスでメソッドを正しく実装していませんRelatable。メソッドの名前を次のisLargerThan(Relatable other)ように変更します。

@Override
int isLarger(Relatable other) {
}

注釈を使用する@Overrideことをお勧めします。これにより、質問のようなエラーをキャッチできます。

于 2012-05-15T13:50:57.757 に答える