マンガで分かる Java入門講座

第9章 クラスとオブジェクト2
9-6. アクセス制御2 protectedと修飾子なし

アクセス制御の第2弾として、「protected」と「修飾子なし」の場合について説明します。

● アクセス制御の範囲

 これまでアクセス制御としてpublicとprivateを使ってきました。しかしJavaには、この2つ以外のアクセス制御の修飾子があります。

 「protected」は、同一クラスに加えて、同一パッケージとサブクラスからアクセス可能な修飾子です。

 修飾子「なし」の場合は、同一クラスと同一パッケージはアクセス可能ですが、サブクラスからはアクセスできません。

 このアクセス制御を、以下に表にまとめます。

表)アクセスが可能か?
修飾子同一クラス同一パッケージサブクラスその他
public
protected×
なし××
private×××

● オーバーライドしたメソッドの可視性は下げられない

 クラスを継承して、メソッドをオーバーライドした際は、その可視性(アクセス制御の範囲)を下げることはできません。

 これは、スーパークラスのメソッドが、オーバーライドされることによって隠蔽されるからです。

図)オーバーライドしたメソッドの可視性は下げられない
                  ┏SubClass━━━━━━━━━━━┓
 Super               ┃ Super            ┃
┏Class ━┓            ┃┏Class ━┓         ┃
┃    ┃public  ─────→ ┃┃    ┃public  private ┃
┃    ┠─○b()  可視性が   ┃┃    ┠─×b()   b()●─┨
┗━━━━┛     下がると   ┃┗━━━━┛         ┃
           同じ物として ┗━━━━━━━━━━━━━━━┛
           扱えない

 対してフィールドは可視性を下げることができます。フィールドはたとえ可視性を下げたとしても、スーパークラスにキャストすることによって、スーパークラスのフィールドにアクセスが可能です。


この講座のマンガ部分は「箱人形マンガ(Box Comic) 」で作成しています。
作成:2013/06/04  更新:2015/08/09  [Permalink]