Java のスーパータイプ バウンド
前回、サブクラスをワイルドカードで指定する方法を説明しました。
この他、Java にはスーパークラスをワイルドカードで指定する方法もあります。
すなわち、「このクラスのスーパークラスなら何でも」という指定方法です。
この場合は、次のようにワイルドカード ? と super というキーワードで表現します。
<? super クラス名>
この方法ではクラス階層の上方への型指定、すなわち「スーパークラス」の指定となるので、スーパータイプ バウンド (supertype bound) という言い方をします。
スーパータイプバウンドとサブクラス図でまとめてみよう
さて、extends、super によるワイルドカード指定について図であらわして、理解を確認しましょう。
次のようなクラス階層があったとします。(かなり大雑把ですが・・・)
基本となるクラス階層
そこで、この時に <? extends "PC Device"> に含まれるクラスは以下の緑で塗りつぶしたクラス全部です。
? extends による指定
一方、スーパーバウンドによる指定は情報へクラス階層のツリーを登りますから、
<? super "Input Device">
に含まれるクラスは以下の緑色のクラスだけです。
? super による指定
このように、クラスツリーの上方にも下方にも型を指定することが可能です。