2013-07-08 145 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{