Re:duvida herança

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:

java_coffe,

no código abaixo: [code]

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
	
	
}

[/code]

é 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:

[ ]

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:

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

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

[/quote]
Alguém já fez o teste? Isso está na especificação?

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

[/quote]
Alguém já fez o teste? Isso está na especificação? [/quote]

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

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

[/quote]
Alguém já fez o teste? Isso está na especificação? [/quote]

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

mais um curioso… :lol:

Nao consegui entender…

[]'s
Geraldo Barboza

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

[/quote]

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

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

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!!!

  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 ?

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

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

Caiu na prova de certificação .

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