2016-04-19 11 views
3

は私の質問です:親クラスから子クラスの面積を計算する方法ここで

  1. 私は、両方の形状の、私は楕円のため正しい面積を取得していますエリアを印刷していますであるが、円の場合は0である。どうして?

  2. 私は複数の円の半径を持っています。以前の半径で計算された領域に、どのように追加することができますか?要するに、私はすべての半径の面積を合計する必要があります。

  3. 円の半径を渡すときは、円の面積(半径で計算)も楕円領域に追加する必要があります。どうやってするか?

これは私の現在のコードです:あなたはCircleareaの値を返すされているCircleクラスの下であなたのgetArea()方法で

public class Ellipse { 
    private double area; 
    private double axis1; 
    private double axis2; 

    public Ellipse() { 
     area = 0; 
    } 

    public Ellipse (double axis1, double axis2) { 
     this.axis1 = axis1; 
     this.axis2 = axis2; 
    } 

    public void calculateArea() { 
     area += axis1 * axis2; 
    } 

    public double getArea() { 
     return area; 
    } 
} 

public class Circle extends Ellipse { 
    private double radius; 
    private double area; 

    public Circle(){ 
     area = 0; 
    } 

    public Circle(double radius) { 
     super(radius, radius); 
    } 

    public double getArea() { 
     return area; 
    } 
} 

public class Driver { 
    public static void main (String args[]) { 
     Ellipse ellipse = new Ellipse(10, 20); 
     ellipse.calculateArea(); 
     Circle circle = new Circle(50); 
     circle.calculateArea(); 
     System.out.println("Area of Circle is : " + ellipse.getArea()); 
     System.out.println("Area of Circle is : " + circle.getArea()); 
    } 
} 

答えて

0

ただし、area変数の結果をEllipseクラスの下で計算します。

public double getArea(){ 
    return super.area; 
} 

・ホープ、このことができます:

protected double area; 

Circleクラスの下であなたのgetArea()方法でに 変更

private double area; 

はこれを行います。

0

1)私は両方の図形の領域を印刷しているとき、私は楕円の正しい領域を取得していますが、ゼロの円の領域を取得しています。どうして? としてDebanicが同様に述べているのでこれは

、あなたはprivateとしてアクセス修飾子Ellipseを宣言しています。したがって、Inheritingの場合、private 変数areaDerivedクラスCircleに継承されません。では、ここで何が起こっていますか?

Circle.getArea()は、Circleクラスareaという変数を返しています。Ellipseクラスareaインスタンス変数をprotectedと宣言してください。 Circleクラスのsuper.getArea()に電話してください。ちょうど上記の答えの状態。 にはアクセス修飾子も置くことができますが、サブクラスが別のパッケージにある場合は問題になります。

2)私は複数の円の半径を持っています。つまり、以前の半径で計算された領域にそれを追加し続けることができます(要するに、すべての半径の面積を合計する必要があります).3)円の半径を渡すたびに、円領域(半径で計算される)を楕円領域にも追加する必要があります。

私はコード全体を書いてはいませんが、あなたを助けるヒントを与えます。したがって、円のradiusまたはaxis1,axis2Ellipseareaに計算されたareaを追加し続けたいと考えています。あなたのコードで

、あなたの目標(シングルエリア毎回の領域を追加すること)を達成することに起因しているhinderanceあなたがnewキーワードを使用して、コンストラクタへの呼び出しを行っている

たび事実でありますあなたは基本的に全く新しいオブジェクトを作成しているので、エリアの値はresetになります。

あなたはすべてのオブジェクトに(を共有)あなたのarea変数が共通になりたいです。これを行うには、static variableと宣言します。 areaの値は、操作するたびに更新され続けます!

関連する問題