2017-06-01 19 views
0

現在Javaを勉強中です。私の課題の1つは、Eclipseのコンソールに四角形を表示する継承コードを書くことです。私はそれを実行しようとすると私のタイトルでエラーを取得し続けているが、私は間違ってやっていることを把握することはできません。任意のヒントやガイダンスをいただければ幸いです。型Rectangleをインスタンス化できません

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てきたようにShapeクラスの2つの抽象メソッドを実装する場合、これらはRectangleクラスで実装するか、Rectangleクラスを抽象化する必要があります。矩形を抽象化すると、インスタンス化することはできません。

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インスタンス化することはできません:に最小限の変更で作業してコードを取得するためには、あなたの長方形クラスの実装をchhangeください

Shape rectangle = new Rectangle(width, length); 

をそして、あなたはRectangleabstractキーワードを削除することはできません2つのメソッドがShapeクラスで実装されていないためです。あなたのインスタンスを作成するには

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

は、具象クラスを作成する必要があるかの方法がShapeクラスから継承されRectangleクラスのすべてのメソッドを実装することができます。

以来area()perimeter()Rectangleクラスの機能を使用すると、これら2つのメソッドを実装し、Rectangleクラスからabstractを削除することができます(今、このクラスが具象クラスです)。次に、メインでRectangleクラスをインスタンス化できます。

関連する問題