0

Shape抽象であるという名前のクラスと、Shapeを拡張するという名前のクラスがありCircleます

Shape shapeCircle = new Circle();

カラーゲッターとセッターはShapeであるため、shapeCircleの色を設定して取得できますが、Circleの寸法はCircleクラス(半径)のみです。

Circleクラスにインスタンス変数private int radiusとと呼ばれるメソッドがある場合getRadius()、どうすれば半径を取得/設定できshapeCircleますか?試しshapeCircle.getRadius();ましたが、運がありません。

4

4 に答える 4

3

オブジェクトshapeCircleでアクセスできるのはShapeのメソッドのみです。shapeCircleはShapeタイプであり、Circleのメソッドは表示されません。

これを使って、

 Circle shapeCircle = new Circle();

CircleとShapeの両方のメソッドを呼び出すことができます。上記の場合は、継承のみを利用します。

編集

しかし、クラスを追加public abstract int getDimension();し、クラスがメソッドを実装する場合ShapeCirclegetDimension()

@Override
    public int getDimension() {
        return radius;
    }

拡張するすべてのクラスは、メソッドShapeを実装する必要がありますgetDimension()。ただし、各サブクラスには独自のディメンションがあります。

使用できます

    Shape shapeCircle = new Circle();
    shapeCircle.getDimension();

これは、ポリモーフィズムと抽象クラスの両方を利用します。

于 2012-10-11T07:04:56.067 に答える
2
Shape shapeCircle = new Circle();

ここでの参照はShapeであり、shapeクラスはradius変数を定義していません。したがって、使用することはできません。shapeCircle.getRadius();

get / set radiousメソッドタイプを呼び出すには、次のようにshapecircle変数をキャストします

Circle shapeCircle = (Circle)shapeCircle;

これで、get /setradiousメソッドを呼び出すことができます。ポリモーフィズムを使用するメリットを得るには、型キャストコードを別の方法で使用する必要があることに注意してください。

編集:

ポリモーフィックコードの記述に役立つすべての重要な/一般的な操作/メソッドを持つように抽象クラスまたはインターフェイスを設計する必要があります。例:半径フィールドはCircleクラスに固有ですが、最終的に面積を計算する必要があると考えてください。したがって、抽象クラスでCalculateArea()メソッドを定義し、すべてのシェイプにこのメソッドを実装させる必要があります。これにより、ポリモーフィズムを実現できます。

Shape ShapeCicle = new Circle(Radius);
Float area = ShapeCircle.area();

ポイントは、半径の例にとらわれないことです。ポリモーフィズムの恩恵を受けることができるような方法でクラスを定義するようにしてください。

于 2012-10-11T07:05:31.220 に答える
0

instanceofここで元のタイプを確認するには、キーワードを使用する必要があります。タイプがの場合、Circlecastと入力して、getRadiusメソッドを呼び出すことができます。何かのようなもの

if (shapeCircle instanceof Circle) {
 Circle circle = (Circle)shapeCircle;
 int radius = circle.getRadius();
}

それで十分です。

于 2012-10-11T07:03:23.197 に答える
0

'Shape is not Circle'=ShapeではCircleメソッドを使用できません。

于 2012-10-11T07:05:19.783 に答える