dポイントプレゼントキャンペーン実施中!

Javaについて。
画像のように"図形(Shape)"のクラスをスーパークラス,"二重円(DoubleCircle)"と"円(Circle)"のクラスををサブクラスとするとき、二重円のクラスの書き方を教えて下さい。

※二重円は、2つの円(Circle)を部分として持つ、コンポジションで表現する。
※二重円も、円と同じく、コンストラクタ、 “getRadius” 、 “scale” 、 “getArea”とい
うメソッドを持つ。
※二重円の半径は外円の半径とする。
※ 内円の半径は外円の半径の1/2とする。
※ 二重円の面積は外円の面積から内円の面積を引いたものとする。

// Shape.java

public abstract class Shape { // 図形
private int x = 0; // X座標
private int y = 0; // Y座標

public Shape(int xx, int yy){
x = xx;
y = yy;
}
public int getX() { // X座標読み出し
return x;
}
public int getY(){
return y;
}

public void move(int dx, int dy) { // 移動
x = x + dx;
y = y + dy;
}
public abstract double getArea(); // 面積計算
}



// Circle.java

public class Circle extends Shape { // 円
private int radius = 0; // 半径

public Circle(int xx, int yy, int rr){
super(xx,yy);
radius = rr;
}
public int getRadius() { // 半径読み出し
return radius;
}
public void scale(double ratio) { // 拡大
radius = (int)(radius * ratio);
}
public double getArea() { // 面積計算
return (radius * radius * 3.14); // 面積=半径*半径*円周率
}
}

「Javaについて」の質問画像

質問者からの補足コメント

  • emacs で書いています。

      補足日時:2020/06/16 23:24

A 回答 (2件)

円は単純な図形の拡張ですが、


二重円の場合はコンポジションとして他の図形を持てと指定されているので、
少々考え方が異なります。

すべての部品(コンポジション)用のフィールドを用意しましょう
初期化子(コンストラクタ)にて、部品を用意してフィールドに入れましょう
移動などの操作時は、自分自身と同時に各部品も操作しましょう
面積などの計算時は、各部品の計算結果を合算しましょう
    • good
    • 0

Shapeが、属性x、yを持つのは


意味不明。

で、クラス図からクラスをおこせないのは
何故ですか?

private Circle outerCircle;
pricate Circle innerCircle;

の2フィールドと必要なメソッドを実装するだけでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!