2013-07-08 88 views
0

嗨我想在Eclipse中执行此代码。java抽象类的用法

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 
+0

正如在这里的各种答案解释你有一个类型。将Shape更改为ShapeNew(虽然我会使用更好的类名)。 – Atul

回答

2

必须更换这行:因为你abstarct类是

class Rect extends Shape 

通过

class Rect extends ShapeNew 
6

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

class Rect extends ShapeNew {

(而且,看来你已经实现了一个方形而比给定区域函数的长方形长度长)。

2

我认为这是一个简单的错字。您的抽象类名是第1行中的ShapeNew,并且您试图获取类Shape的新实例。改变形状以ShapeNew

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

} 
0

你得到一个错误:ShapeNew,你继承子类错误的名字:Shape

所以,只需将此名称更改为ShapeNew。

class Rect extends ShapeNew{