Sobrescrita de variáveis de instancia

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=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 ? :slight_smile:

Eu concordo essa é a abordagem correta. Mas a pergunta é se é possível a sobrescrita, assim como:

public class Pai{

int x = 100;

}

public class Filho extends Pai{

int x = 200;

}

[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;
	}
}

[quote=jason_canto]Eu concordo essa é a abordagem correta. Mas a pergunta é se é possível a sobrescrita, assim como:

public class Pai{

int x = 100;

}

public class Filho extends Pai{

int x = 200;

}
[/quote]

Use a tag code para postar código ok ? :slight_smile:
E cadê a sobrescrita de referência ? Se tu criar uma referência a classe Filho, ela não se altera.

Pai pai = new Filho();

‘pai’ é a variável de instancia, como tu quer sobrescrever isso ?

Obrigado rmendes08, essa era a reposta que estava procurando.