Public, private, protected, e qual o outro?

Ah sim, mas isso que você está fazendo realmente não é possível,

você está tentando acessar o atributo de C1 em C2, mas pela variável de referência de C1.

o que você pode fazer é acessar o membro herdado. você invoca ele como se fosse seu próprio. Assim:[code]public class C2 extends C1{

public static void main(final String[] args){
    C2 c2 = new C2();
    c2.f();
}

}[/code] Fez sentido ?

[quote=digaoneves]Ah sim, mas isso que você está fazendo realmente não é possível,

você está tentando acessar o atributo de C1 em C2, mas pela variável de referência de C1.

o que você pode fazer é acessar o membro herdado. você invoca ele como se fosse seu próprio. Assim:[code]public class C2 extends C1{

public static void main(final String[] args){
    C2 c2 = new C2();
    c2.f();
}

}[/code] Fez sentido ?[/quote]

Concordo, inclusive resolvi assim, mas ele funciona se eu colocar tudo no mesmo pacote e, obviamente, funciona se eu colocar em f() como publica em C1.

Você entende o motivo disso, correto ?

Você entende o motivo disso, correto ?[/quote]

Sim, protected é menos restrivo que default, mas acho estranho eu não poder generalizar fazendo C1 c = new C2(); em outro pacote, já que há herança. Ter que fazer typecast aí me parece forçar a barra, mas tudo bem.

É, o protected é meio confuso.

quando você herda um membro protected, você tem que ver ele como se fosse um membro private seu, que você acessa diretamente. Pelo menos eu penso assim :slight_smile: E se não me engano no livro da Kathy Sierra e do Bert Bates, eles fazem um comentário parecido com esse.

É, o protected é meio confuso.

quando você herda um membro protected, você tem que ver ele como se fosse um membro private seu, que você acessa diretamente. Pelo menos eu penso assim :slight_smile: E se não me engano no livro da Kathy Sierra e do Bert Bates, eles fazem um comentário parecido com esse.[/quote]

Valeu pela ajuda!
Abraços!