java抽象类用法

时间:2013-07-08 07:45:12

标签: java abstract-class

您好我正在尝试在Eclipse中执行此代码。

abstract class ShapeNew {
    int length;
    public abstract double area();
}
 class Rect extends Shape{
    Rect(int side){
        this.length = side;
    }
    public double area(){
        System.out.println("area of rectangle"+ length*length);
        return length*length;
    }



    /**
     * @param args
     */
public static class Area{
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ShapeNew rect = new Rect(32);// I am unable to use this. The eclipse throws an error//

        rect.area();
    }

}

任何人都可以帮助我。为什么我无法将ShapeNew的引用分配给Rect的对象? 我收到此错误

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Type mismatch: cannot convert from Rect to ShapeNew

5 个答案:

答案 0 :(得分:6)

你有一个错字:你需要扩展你定义的类:

class Rect extends ShapeNew {

(另外,看起来你已经实现了一个正方形而不是一个矩形,因为你的区域函数是一个长度)。

答案 1 :(得分:2)

我认为这是一个简单的错字。您的抽象类名称是第1行的ShapeNew,并且您正在尝试获取类Shape的新实例。将Shape更改为ShapeNew

答案 2 :(得分:2)

您必须替换此行:

class Rect extends Shape

通过

class Rect extends ShapeNew

答案 3 :(得分:0)

  abstract class ShapeNew {
  int length;
  public abstract double area();
                          }
  class Rect extends ShapeNew{
  Rect(int side){
    this.length = side;
}
public double area(){
    System.out.println("area of rectangle"+ length*length);
    return length*length;
}
 }


public  class Area{
public static void main(String[] args) {
    // TODO Auto-generated method stub

    ShapeNew rect = new Rect(32);

    rect.area();
}

 }

答案 4 :(得分:0)

您收到错误,因为您抽象类是:ShapeNew并且您从错误的名称继承子类:Shape

所以只需将此名称更改为Shape New。

 class Rect extends ShapeNew{