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:错误:Rectangle不是抽象的,并且不会覆盖Shape中的抽象方法重叠(Shape)
public class Rectangle extends Shape
^Rectangle.java:17:error:方法不会覆盖或实现超类型中的方法
@覆盖
^Rectangle.java:22:error:方法不会覆盖或实现超类型的方法
@覆盖
^3个错误
答案 0 :(得分:1)
此方法public boolean overlap(Rectangle other)
和此
public abstract boolean overlap(Shape other);
不一样,
即使矩形扩展/实现形状 ......
从技术上讲,你并没有覆盖抽象类的所有方法......
和覆盖注释会给你一个抱怨,因为该方法可以在超类中找到....
答案 1 :(得分:0)
Rectangle
' overlap
方法必须与父级的方法具有相同的签名才能覆盖它:
@Override
public boolean overlap(Shape other)
{
return false;
}
如果您要求传递给Shape
Rectangle
的{{1}}为overlap
,则可以使用Rectangle
检查类型:
instanceof
答案 2 :(得分:0)
表示错误消息
Rectangle.java:17:error:方法不会覆盖或实现 来自超类型的方法
@覆盖
你会注意到你的Rectangle类只是对shape类进行子类化,这意味着类似
@Override
public boolean overlap(Rectangle other)
是错误的,因为java期望超类应该有方法overlap(Rectangle other)
。相反,它看到overlap(Shape other)
并且它们完全不同。
解决方案:如果您仍然需要该方法,请删除@Override注释。
有关错误消息
Rectangle.java:22:error:方法不会覆盖或实现 来自超类型的方法
@覆盖
嗯,你仍然没有覆盖你必须的方法。
解决方案:将overlap(Rectangle other)
更改为overlap(Shape other)
或完全编写一个新的覆盖方法,如下所示:
@Override
public boolean overlap(Shape other)
{
return false;
}
希望这会有所帮助。