私はスーパータイプ(シェイプ)と2つの子供(スクエア、サークルのような)を持っているとしましょう。スーパータイプから子へキャストバック
またShape shape = someObject.getShape();
if (shape instanceof Square){
shape = (Square) shape;
// do this
} else if (shape instanceof Circle) {
shape = (Circle) shape;
// do that
}
、正しいOO原理を思われないのインスタンスを取得しているので、それを行う別の方法があります:
私はこのような何かをしようとしていますか?乾杯。
編集。私はそれらのメソッドを呼び出すつもりはないので、それらを特定のサブタイプを必要とするいくつかのメソッドに渡したいと思います。
edit2基本的に私はそれに両方のタイプのサブタイプを保持できるようにShapeタイプのコレクションを持っています。しかし、ある時点で処理する場合、サブクラスを引数として取るメソッドに渡すことができます。引数としてスーパータイプを簡単に使用できますが、サブタイプ固有のデータを扱うので、安全ではありません。
'Square square;のような新しいインスタンスを作成する必要があるかもしれません。 if(正方形の形状インスタンス){正方形=(正方形)形状; // do this} ' – twain249
より良いオブジェクト指向の原則は、両方の共通のスーパータイプに共有抽象メソッドを持たせることです。次に、実際の形状が何であっても、スーパータイプ宣言を使用してクラス固有のメソッドを呼び出すことができます – ControlAltDel
問題は、このメソッドを呼び出すのではなく、このオブジェクトをサブタイプを必要とする別のメソッドに渡すことです。 –