Quando uma classe tem um membro protegido (protected) significa que este membro tem o comportamento SEMELHANTE ao modificador de acesso default, ou seja, um membro sem nenhum modificador de acesso (public, protected e private). Mas como um default “funciona”?, um membro default só pode ser visto pela própria classe e pelos seus “visinhos” (outras classes do mesmo pacote) da mesma forma funciona um membro protected, porém, com uma única diferença: as subclasses da classe que contém o membro protected podem ter acesso a esse membro. Contudo, se essa suclasse estiver num pacote diferente da superclasse isso implica que somente a subclasse poderá ter acesso a esse membro protegido mas não as outras classes do mesmo pacote da subclasse (neste caso, esse comportamento é semelhante a um membro private)
Bom assim eu entendi, caso tenha alguma coisa errada por favor me corrijam. No caso de alguma omissão me perdoem.
eh isso, tah certo… soh lembrando que o membro protected pode ser visto por qualquer filho, ateh filho do filho. E cuidado para não confundir se tiver outro atributo public com o mesmo nome do atributo protected:
package teste.a;
public class Pai {
protected int i;
public Pai(int i) {
this.i = i;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
package teste.b;
import teste.a.Pai;
public class Filho1 extends Pai {
public Filho1(int i) {
super(i);
}
}
package teste.b;
public class Filho2 extends Filho1 {
public int i;
public Filho2() {
super(1);
this.i = 2;
}
public void a() {
System.out.println(i);
System.out.println(super.i);
System.out.println(getI());
}
public static void main(String[] args) {
new Filho2().a();
}
}