2016-07-23 21 views
0
public abstract class Shape{ 

    protected Point position; 

    public Shape (Point p) 
    { 
     this.position=new Point(p); 
    } 

    public abstract int getArea(); 
    public abstract int gerPerimeter(); 
    public abstract boolean overlap(Shape other); 

} 
public class Rectangle extends Shape 
{ 
    public int width; 
    public int height; 

    public Rectangle(Point position,int width,int height) 
    { 
     super(position); 
     this.width=width; 
     this.height=height; 
    } 
    @Override 
    public int getArea() 
    { 
     return width*height; 
    } 
    @Override 
    public int getPerimeter() 
    { 
     return width*2+height*2; 
    } 
    @Override 
    public boolean overlap(Rectangle other) 
    { 
     return false; 
    } 
} 

Rectangle.java:1: error: Rectangle is not abstract and does not override abstract method overlap(Shape) in Shapeabstrakte Klasse Fehler einfach Klasse

public class Rectangle extends Shape
^

Rectangle.java:17: error: method does not override or implement a method from a supertype

@Override
^

Rectangle.java:22: error: method does not override or implement a method from a supertype

@Override
^

3 errors

Antwort

0

Rectangle ‚s overlap Methode muss die gleiche Signatur wie die Klassenmethode der Eltern haben, um sie außer Kraft zu setzen:

@Override 
public boolean overlap(Shape other) 
{ 
    return false; 
} 

Wenn Sie dasbenötigenbis Rectangle ‚übergeben s overlap ein Rectangle sein, können Sie den Typ instanceof mit überprüfen:

1

Diese Methode public boolean overlap(Rectangle other) und diese

public abstract boolean overlap(Shape other); sind nicht die gleichen,

selbst wenn sie wahr ist, dass Rechteck verlängert/implementiert Form ...

so technisch Sie die Methoden der abstrakten Klasse nicht überschrieben sind alle ...

und die Aufschalten Anmerkung Sie beklagen geben, da diese Methode in der Superklasse zu finden sind ....

0

für die Fehlermeldung

Rectangle.java:17: error: method does not override or implement a method from a supertype

@Override

werden Sie feststellen, dass Ihre Klasse Rectangle ist nur Unter Klassierung der Form-Klasse, die bedeutet, dass so etwas wie

@Override 
public boolean overlap(Rectangle other) 

wäre falsch, weil Java erwartet, dass die Oberklasse die Methode overlap(Rectangle other) haben sollte. Stattdessen sieht es overlap(Shape other) und sie sind völlig unterschiedlich. Lösung: Wenn Sie die Methode weiterhin verwenden möchten, entfernen Sie die Annotation @Override.

Für die Fehlermeldung

Rectangle.java:22: error: method does not override or implement a method from a supertype

@Override

Nun, Sie immer noch nicht die Methode überschrieben haben noch welche Sie müssen. Lösung: entweder ändern Sie die overlap(Rectangle other) zu overlap(Shape other) oder vollständig eine neue Überschreibung Methode wie folgt schreiben:

@Override 
public boolean overlap(Shape other) 
{ 
    return false; 
} 

Hope this geholfen.