“elvishr”:
Humm…
Então é como se eu tivesse acesso a variável da superclasse, só porque somente através dos métodos, quem tem acesso na verdade é o método, e ele seta ela e traz o resultado, a SubEx como subclasse está restrita a somente utilizar os métodos herdados.
Ok, mas desse jeito parece que fica um pouco confuso, se o método é da superclasse, instancio uma subclasse, chamo o método da subclasse e ele muda a variável da superclasse, sem a superclasse instanciada, sem o método ser static…
Desculpe, entendi sua explicação, mas fiquei um pouco confuso agora… :roll:
ok 
Talvez alguém possa explicar de forma mais clara, eu não sou muito bom nisso.
Mas veja mais ou menos deste modo, a subclasse tem acesso aos métodos públicos da superclasse, não importa o que estes métodos façam. Você instanciou uma subclasse, mas esta subclasse herdou os métodos públicos da superclasse portanto ela tem acesso à estes métodos. O que estes métodos fazem já é outra coisa. Eles mudaram uma variável private de superclasse, mas a subclasse não sabe disso, e nem precisa saber, já que ela está se “comunicando” com a superclasse através de sua interface pública.
O exemplo abaixo funciona do mesmo modo, note que SubEx não é mais subclasse de Ex:
class Ex {
private int valor;
public void setValor(int val) {
valor = val;
}
public int getValor() {
return valor;
}
}
public class SubEx {
public static void main (String [] args) {
Ex ex = new Ex();
ex.setValor(5);
System.out.println(ex.getValor());
}
}