スーパークラス型でインスタンスすると。。。
すごく基本的な事ですがよくこんがらがるのでメモメモ。。
下記のようにスーパークラス型でサブクラスをインスタンスすると
オーバラライドしたサブクラス以外(サブクラス独自のメソッド)は使えなくなります。
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(); //しかし!サブクラスでキャストすると呼び出せます。
}
}
サブクラスを沢山実装したい場合にスーパークラス型で宣言しておけば
統一した型で宣言できる事にあるようです。。
うーん。やっぱこんがらがりそう。