抽象类错误简单类

时间:2016-07-23 11:15:46

标签: java class abstract

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个错误

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;
}

希望这会有所帮助。