対象書籍
Eclipseで学ぶはじめてのサーブレット&JSP ●質問:
本書のサンプルにおいて、メソッドの修飾子をprotectedにし、アノテーションでオーバーライドしている理由を教えてください。
●回答
P.174の一番下のコードのservice()メソッドを見てください。
このように、service()メソッドからdoGet()メソッドやdoPost()メソッドがコールされます。
doGet()メソッドやdoPost()メソッドは、HttpServletに定義してあり、それを各クラスでオーバーライドしているのです。
スーパークラスのメソッドをオーバーライドする場合の修飾子は、protectedかpublicになります。
スーパークラスのメソッドがpublicの場合はpublic、スーパークラスのメソッドがprotectedの場合は、protectedかpublicです。
doGet()、doPost()は、service()メソッドの中からしかコールされないメソッドなので、protectedで十分です。
publicでも動作しますが、余計な公開はしない方が良いというのがプログラミングするうえでの基本的な考え方です(プログラミングする際に、全部のメソッドをpublicにせず、privateも使っているのであれば、納得すると思います。仮に、「全部publicでも良いですよね?」という考えであれば、基礎をあまり理解していないと言えます)。