Javaの隠蔽

前回までの実装について以下にクラス図を示します。

ここから以下のようにデフォルトパッケージを作成します。

右クリックから「新規」>「パッケージ」をクリックして下さい。

「com.sample」というパッケージを作成しました。

ドラッグ&ドロップで作成した「com.sample」に移動しました。

「TestClass」のアクセス修飾子「public」を削除します。これでデフォルトアクセス修飾子になります。デフォルトアクセス修飾子は修飾子はパッケージ外からアクセスできません。

HelloWorldクラスでは「com.sample.TestClass」が不可視ですというエラーが発生してしまうので、import文を削除します。

Factoryというクラスを作成します。

Sample型を返却するcreateメソッドを作成します。TestClassをインスタンス化して返却します。

mainメソッドで、先程作ったFactoryクラスのcreateメソッドを呼び出します。

現状、TestClassはデフォルト修飾子となっているため、外部のパッケージからはアクセスできませんが、同じパッケージからはアクセスできてしまいます。

パッケージ内部でアクセス制御する場合はInnerクラスを使用します。

クラスの中にクラスを定義することをInnerクラスと呼びます。

Factoryクラスの中に「InnerSample」というInnerクラスを作成します。アクセス修飾子をprivateにすることでクラス外からはアクセスできない状態にします。

Factoryクラス内部ではこの「InnerSample」というクラスを扱えます。

そこでcreateメソッドにて、「new Factory().new InnerSample();」を返却するようにします。

これで同パッケージからも隠蔽することが出来ました。

なぜ隠蔽?

隠蔽を意識せずにアクセスができてしまうクラスを作成すると、色々な箇所(クラス)から使用されてしまい、クラス設計が煩雑になってしまいます。そうすると、バグの温床になったり、修正が困難になってしまいます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次