2017-06-01 151 views
0

我目前正在學習java。我的一項任務要求我們編寫一些繼承代碼,它將在Eclipse的控制檯中顯示一個矩形。試圖運行它時,我不斷收到錯誤信息,但無法弄清楚我做錯了什麼。任何提示或指導將不勝感激。無法實例化類型矩形

TestShape.java

public class TestShape { 

    public static void main(String[] args) { 

     double width = 5, length = 7; 
     Shape rectangle = new Rectangle(width, length); 
     System.out.println("Rectangle width: " + width + " and length: " + length 
       + "\nResulting area: " + rectangle.area() 
       + "\nResulting perimeter: " + rectangle.perimeter() + "\n"); 
    } 

} 

Shape.java

public abstract class Shape { 

     public abstract double area(); 
     public abstract double perimeter(); 
     public double getArea() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 
     public double getPerimeter() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

} 

Rectangle.java

public abstract class Rectangle extends Shape { 

    private final double width, height, area, perimeter; 

    public Rectangle(double width, double height) { 

    this.width = width; 

    this.height= height; 

    this.area = width * height; 

    this.perimeter = 2 * (width + height); 
    } 

    @Override 

    public double getArea() { 

    return this.area; 

    } 

    @Override 

    public double getPerimeter() { 

    return this.perimeter; 

    } 

} 
+0

你不能像你那樣實例化一個抽象類 –

+0

你不能實例化抽象類 - 它們只能被繼承。從'Rectangle'類的定義中移除'abstract'。 –

+1

爲什麼你的Rectangle類是抽象的? –

回答

1

當你有defin ed在Shape類中有2個抽象方法,這些需要由Rectangle類或Rectangle類實現,需要抽象化。如果你使矩形抽象,你將無法實例化。爲了讓你的代碼最小的變化的工作,請chhange您矩形類實現到:

public class Rectangle extends Shape { 

    private final double width, height, area, perimeter; 

    public Rectangle(final double width, final double height) { 
     this.width = width; 
     this.height = height; 
     this.area = width * height; 
     this.perimeter = 2 * (width + height); 
    } 

    @Override 
    public double getArea() { 
     return this.area; 
    } 

    @Override 
    public double getPerimeter() { 
     return this.perimeter; 
    } 

    @Override 
    public double area() { 
     return getArea(); 
    } 

    @Override 
    public double perimeter() { 
     return getPerimeter(); 
    } 
} 
+1

@ shash678謝謝,我已經更新了我的答案。 –

+0

非常感謝。這解決了我的問題! –

2

的事情是,你不能實例abstract class

Shape rectangle = new Rectangle(width, length); 

而且你不能在Rectangle刪除abstract關鍵字因爲兩種方法都沒有在Shape類中實現。

public abstract double area(); 
public abstract double perimeter(); 

實例化,你需要創建concreate類或可在Rectangle類,其方法是從Shape類繼承實現所有的方法。

由於area()perimeter()Rectangle類的功能,你可以實現這兩種方法,並從Rectangle類中刪除abstract(現在這個類是一個具體的類)。然後,你可以在main中實例化Rectangle類。