デザイナーが始めるプログラミング

グラフィックデザインを経験後、プログラマーへと転身すべく日々の勉強を書き綴った奮闘日記

スーパークラス型でインスタンスすると。。。

すごく基本的な事ですがよくこんがらがるのでメモメモ。。

下記のようにスーパークラス型でサブクラスをインスタンスすると

オーバラライドしたサブクラス以外(サブクラス独自のメソッド)は使えなくなります。

 

abstract class Super_ab {

 protected abstract void AA();

 protected abstract void BB();

}

class Sub_ab extends Super_ab {

 public void AA() {}

 protected void BB() {}

 public void CC() {}

}

public class Test20 {

 public static void main(String[] args) {

 Super_ab s = new Sub_ab(); //スーパークラス型でインスタンス

 s.AA();

 s.BB();

 //s.CC(); サブクラス独自のメソッドを使用できない。

 ((Sub_ab)s).CC(); //しかし!サブクラスでキャストすると呼び出せます。

 }

}

 

スーパークラス型でインスタンスするメリットとしては

サブクラスを沢山実装したい場合にスーパークラス型で宣言しておけば

統一した型で宣言できる事にあるようです。。

Javaオブジェクト指向様々といったところでしょうか。

 

うーん。やっぱこんがらがりそう。