質問: アクセス修飾子の使い分けで悩んでいます。 例えば親クラスanimalのフィールドであるageに何もつけずに子供クラスを同じパッケージに入れることでアクセスができますね また、初めからprotectedをつけた場合では、サブクラスから直接アクセスできます。(同パッケージもアクセスできるのですが;;) 結局のところ、パッケージの分け方によって利用するアクセス修飾子が変わってくると思いました。 実際に開発をあまりしたことがないために、先輩方のご意見をいただきたいです。 参考になるリンクがあったら教えていただけると、とても嬉しいです。 よろしくお願いします
回答: 自分だけで、単一のパッケージで開発をしている分には、privateとそれ以外で分ける以外にさほど意味はないでしょう。 意味が出てくるのは作成したクラスを外部に公開する場合です。つまり、「他人にこのクラスをどう使わせるか」で修飾子の使い方が分かれてくるのではないでしょうか。 publicとprivateはわかりやすいので省略。 protectedと修飾子なしは似ていますが、サブクラスにアクセス権があるか否かで異なります。 修飾子なしは自パッケージからのみアクセスできるため、いわば「自分専用」。他人がほかのパッケージからそのクラスを継承しようと直接使うことはできない(オーバーライドも不可)ため、「パッケージプライベート」とも呼ばれています。 protectedも、そのままでは外部から使えません。privateや修飾子なしと同様、内部処理に使用している面が大きいです。しかし、継承してオーバーライドができる、つまり改造ができます。「内部処理用のメソッドだけど、改造して使いたければどうぞ」という意味合いになると思います。