Recentemente vi um tópico perguntando quando usar protected. Gostaria de levantar uma discussão para quem quiser participar e dá sua opnião.
A própria classe, as classes filhas e as classes do mesmo pacote têm visibilidade dos membros protected. Essa é a especificação de Java.
Eu considero uma falha de Java tratar o protected dessa maneira, pq com isso vc pode quebrar o encapsulamento, e como ngm quer fazer isso acaba q membros protected são evitados e esse modificador muitas vezes perde seu sentido. Se ele se aplicasse apenas as proprias classes e classes filhas seria muito interessante.
Voltando a pergunta principal. Quando usar protected.
Costumo usar protected em membros (métodos ou atributos) que devem ser herdados, qd as classes filhas tem autoridade para saber da existência deles. O pessoal está muito bitolado a definir q variável de instancia eh private para se ter encaspulamento e esquecem o protected. Dai classes filhas q teriam total propriedade para conhecer determinados membros, perdem esse direito tendo q ter acesso via get e set.
Para exemplificar umj atributo nome da classe Pessoa, deveria ser protected, daí a classe Cliente q herda de Pessoa teria acesso direto. Afinal cliente TEM um nome! Deve haver henraça sim, caso seja private não haverá herança e o acesso terá q ser dado por get e set.
O pecado do protected de Java é aquele mesmo, daí algumas pessoas justificam com isso o eterno uso dos privates. Porém ainda há uma defesa =P Normalmente classes q ficam no mesmo pacote só quem tem acesso é vc ou alguem do seu grupo de desenvolvimento. Se vc destribui uma framework ou biblioteca ngm poderá botar classes nos seus pacotes e quebrar o encapsulamento pq vc usou protected. Bem… essa eh minha opinião. Quem tiver outras bota ai q a gente discute. Sempre quis saber opiniões dos demais sobre esse assunto.
[]´s
