package p1;
public class A {
protected int i = 10;
public int getI() { return i; }
}
package p2;
public class B extends p1.A {
public void process(A a)
{ a.i = a.i*2; }
public static void main(String[] args)
{
A a = new B();
B b = new B();
b.process(a);
System.out.println( a.getI() );
}
}
protected, funciona com acesso direto para classes do mesmo pacote…se vc colocar em outro pacote mesmo sendo subclasse, ele nao funciona…entao vc teria que mudar seu protected para public…pelo menos aqui no meu eclipse funcionou assim…
package p1;
public class A {
public int i = 10;
public int getI() { return i; }
}
package p2;
public class B extends p1.A {
public void process(p1.A a)
{ a.i = a.i*2; }
public static void main(String[] args)
{
p1.A a = new B();
B b = new B();
b.process(a);
System.out.println( a.getI() );
}
}
Essa questão é pegadinha mesmo, quando se “É-UM” em java o acesso protected permite sim acessar o atributo ou método tando ou não no mesmo pacote, ou seja ele é menos restrintivo do que o default, porém o que acontece é que o método
recebe como parêmetro uma referência a classe A e neste caso não adianta B ser uma especialização de A, pois B neste momento tratará uma variável da classe A e não a si mesmo, por exemplo:
se removermos
e colocarmos
o código passa a ser compilável, mesmo que não sirva para nada pois não usamos a variável a para nada.