Pessoal estava fazendo um teste para java no qual havia uma pergunta sobre sobrescrita de variáveis de instancia, segue a pergunta:
“É possível sobrescrever variáveis de instancia em uma sub-classe como em métodos de instancia?”
A resposta era FALSO.
Não entendi exatamente isso, será que estou perdendo algum conceito de OO. Para mim é possível sim a sobrescrita de uma variável de instancia na classe pai por uma sub-classe. Ou seja, quando uma classe extends outra classe ela herda todos os seus membros (métodos e variáveis) sendo assim possível a sobrescrita de qualquer um deles sem problema. Estou errado???
[quote=jason_canto]Pessoal estava fazendo um teste para java no qual havia uma pergunta sobre sobrescrita de variáveis de instancia, segue a pergunta:
“É possível sobrescrever variáveis de instancia em uma sub-classe como em métodos de instancia?”
A resposta era FALSO.
Não entendi exatamente isso, será que estou perdendo algum conceito de OO. Para mim é possível sim a sobrescrita de uma variável de instancia na classe pai por uma sub-classe. Ou seja, quando uma classe extends outra classe ela herda todos os seus membros (métodos e variáveis) sendo assim possível a sobrescrita de qualquer um deles sem problema. Estou errado???
Agradeço pelas respostas[/quote]
Mas ai você sobrescreve um método e não a instância, concorda ?
[quote=jason_canto]Pessoal estava fazendo um teste para java no qual havia uma pergunta sobre sobrescrita de variáveis de instancia, segue a pergunta:
“É possível sobrescrever variáveis de instancia em uma sub-classe como em métodos de instancia?”
A resposta era FALSO.
Não entendi exatamente isso, será que estou perdendo algum conceito de OO. Para mim é possível sim a sobrescrita de uma variável de instancia na classe pai por uma sub-classe. Ou seja, quando uma classe extends outra classe ela herda todos os seus membros (métodos e variáveis) sendo assim possível a sobrescrita de qualquer um deles sem problema. Estou errado???
Agradeço pelas respostas[/quote]
Sim, está.
É possível em uma classe filha declarar uma variável de instância que tenha o mesmo nome que uma variável de instância da classe pai, mas isso não quer dizer que houve sobrescrita. Isso porque se um método na classe pai depende dessa variável esse método vai acessar exclusivamente a sua própria variável, e não a variável declarada na classe filha. Com métodos é diferente. Se na classe pai um método x depende de outro Y e Y é sobrescrito na classe filha, ao executar X na classe filha ele acessará a versão sobrescrita e não a versão original. Veja:
public class Main{
public static void main(String[] args) {
new Pai().print();
new Filha().print();
}
}
class Pai{
protected int varX = 10;
public int metodoX(){
return 10;
}
public void print(){
System.out.println("var: " + varX);
System.out.println("metodo: " + metodoX());
}
}
class Filha extends Pai{
protected int varX = 20;
@Override
public int metodoX() {
return 20;
}
}