Re:duvida herança

14 respostas
dipeloco

Não sei exatamente o porquê mais isso caiu na minha prova de certificação … Como nunca havia me deparado com essa situação eu chutei que iria imprimir a variável da classe mãe pois seria muito simples caso imprimisse a variável da classe filha … se alguém souber o que acontece eu também gostaria de saber :stuck_out_tongue:

14 Respostas

jPscoralicK

java_coffe,

no código abaixo:
public static void main(String[] args) {
 		
 		A a = new B();
 
 		System.out.println( a.getNome() );
 
 		System.out.println( a.nome ); // acessa a variável de instância "nome" da classe "A"
 
                 VAI IMPRIMIR B E DEPOIS VAI IMPRIMIR A
 		
 		
 	}

é impressa a letra "A" a partir do comando System.out.println(a.nome);, porque você acessou o atributo "nome" da classe "A", já que o objeto "a" é declarado como sendo da classe "A".

Errei no código que te passei anteriormente, agora também estou da dúvida! :lol:

[ ]

Foxlol

Mas por que é garantido apenas o acesso aos métodos de B e não aos atributos de B ? Esta é a questão!

A que se deve isso ? To curioso agora :shock:

adriano.ferranti

Métodos são substituídos (override), variáveis não.

L

adriano.ferranti:
Métodos são substituídos (override), variáveis não.


Alguém já fez o teste? Isso está na especificação?

adriano.ferranti

luidhi:
adriano.ferranti:
Métodos são substituídos (override), variáveis não.


Alguém já fez o teste? Isso está na especificação?

Especificação? Isso não é relativo a Java, mas à OO

adriano.ferranti

luidhi:
adriano.ferranti:
Métodos são substituídos (override), variáveis não.


Alguém já fez o teste? Isso está na especificação?

Especificação? Isso não é relativo à Java, mas à OO.

G

mais um curioso… :lol:

Nao consegui entender…

[]'s
Geraldo Barboza

Raff

adriano.ferranti:
Métodos são substituídos (override), variáveis não.

COmo o adriano.ferranti disse isso é conceito de O.O pessoal !!!

O

Boa tarde galera…
Estava eu e meu amigo Camilo comentando sobre este assunto e ele me lembrou…
Somente metodos sao subscritos e recebem o valor do objeto criado.
Variaveis de instancias nao sao subscritas:

class B extends A{
   String a = "B";
}

Matodo main

A a = new B();
Sytem.out.println(a);

A variavel a é do tipo A mas o objeto criado é B,…
E como eu disse antes…Subscricao sao apenas para metodos se vc chamar a variavel de referencia ela vai pegar do tipo…Neste caso imprime “A” porque ele pega o tipo e nao o Objeto…O tipo é da classe A e o objeto é B…

Ate mais… Espero ter ajudado

leandros

Vamos lá então pessoal…

Na classe B quando nosso amigo omaisnormalbaba, cria o atributo,

String nome = "B"

A JVM entende que é um novo atributo, pessoal não existe sobrecarga nem sobreescrita de atributo, só de método.
Por isso que quando você chamar

a.getNome() ele está retornando o atributo que você criou na classe B, mas porque fazer isso, se ele já está herdando nome da classe A???
Porque ele retorna o atributo da classe B??? Porque houve sobreescrita de método, então você está chamando o getNome() de B correto!!!..E isto ocorre em tempo de execução, mas porque então na hora de vc imprimir a.nome ele retorna A??!! Porque isso ocorre em tempo de compilação, a referência tipada a é do tipo A e não B, por isso ele só consegue ler a String de A!!!

Pessoal isso tem no livro da Kathy Sierra!!..

Se não ficou claro posta ai que a gente resolve!!!

I
public class A {

	String nome = "A";
	
	
	
	public String getNome() {
		return this.nome;
	}



	public void setNome(String nome) {
		this.nome = nome;
	}
	
	
	

}
public class B extends A {

	
	String nome= "B" ;
	


	public String getNome() {
		return this.nome ;
	}


	public void setNome(String nome) {
		this.nome = nome ;
	}




	public static void main(String[] args) {
		
		A a = new B();

		System.out.println( a.getNome() );

		System.out.println( a.nome );

                VAI IMPRIMIR B E DEPOIS VAI IMPRIMIR A
		
		
	}

}

Gente pq não imprime o B novamente quando eu acesso diretamente pelo atributo(a.nome) . Pois o próprio atributo esta sendo declarado na propria subclasse tambem ?

I

Acho que geriu polemica :lol: …Muito bom isso !!!

Espero que alguem possa sanar essa duvida pro pessoal do forum …

I

Caiu na prova de certificação .

I

Conceirto de OO é …Mas tem que explicar o motivo !

Criado 21 de maio de 2007
Ultima resposta 21 de mai. de 2007
Respostas 14
Participantes 10