1

わかりましたので、基本的には、ユーザーが形状 (三角形、正方形、円) を選択できるようにするプログラムを作成しています。次に、int を取り、境界の長さと面積を計算します。

私はこれを行うことに問題はなく、完全に機能するプログラムを持っています。( https://gist.github.com/anonymous/c63a03c129560a7b7434 4 クラス) しかし、今はこれをポリモーフィズムの概念で実装する必要があり、どうすればよいか正直苦労しています。

継承に関して何をしたいのかについての基本的な考えがあります

                                       Main
                                         |
                                       Shapes
                                       /  |  \
                                triangle circle square

しかし、三角形/正方形/円クラス内のすべてのメソッドが一意である場合にオーバーライドする方法がわかりません。「シェイプ」クラスから継承できるような「抽象」メソッドはありません。

誰かが私がリンクしたコードをすばやく見て、これを行う方法を提案していただければ幸いです。

この説明が下手だったらすみません。ありがとう。

4

4 に答える 4

1

シェイプ オブジェクト間に共通のインターフェイスがないことに気付きました。

あなたはおそらく次のようなことをすることができます:

public interface Shape {
  // whatever polymorphic behavior you want
}

そして、各クラスは次のように宣言されます。

public class Circle implements Shape {
  // ...
}

public class Triangle implements Shape {
  // ...
}

public class Square implements Shape {
  // ...
}

于 2013-10-22T21:44:12.677 に答える
1

多分これは始まりかもしれません:

public abstract class Shape {
    protected double length;
    public Shape(double length) {
      this.length = length;
    }
    public abstract double getArea();
    public abstract double getBoundaryLength();
}

そして、1つの可能な実装

public class Circle extends Shape {
  @Override
  public double getArea() {
    return length * length * Math.PI;
  }
  @Override
  public double getBoundaryLength() {
    return 2 * length * Math.PI;
  }
}

メイン内:

Shape shape = new Circle(scan.nextDouble()); // Use variable of type shape here

..

// this code is the same for all shapes
double boundaryLength = shape.getBoundaryLength(length);
double area = shape.getArea(length);
System.out.println("Boundary Length = " + Math.round(boundaryLength));
System.out.println("Area = " + Math.round(area));
于 2013-10-22T21:45:34.237 に答える
1

ここでの考え方は、Shape の抽象メソッドとしてすべての子クラスに現れるメソッドを持つことです。これを行うと、Shape オブジェクトがどのような形状であるかを知らなくても、Shape オブジェクトを Shape として扱うことができます。たとえば、次のようにします。

Shape c = new Circle(50);
System.out.println(c.getArea());

これにより、円で計算された形状の正しい領域が印刷されますが、形状としては使用されます (2 行目は、円として作成された起源について何も知りませんが、円として計算されます)。これは、継承を使用することによってのみ実行できます。

于 2013-10-22T21:46:27.783 に答える