Questão interressante...?

6 respostas
D

Fala galera olha eu ai.. eh o seguinte tenho esse código ai:

class Pai{

public String nome="Edson";
    
public void principal()
    {
    	System.out.println("um");
    	
    }	
    
}

public class Filha extends Pai
{ 
   String nome="Rodolfo";
   
    public void principal()
    {
    	System.out.println("dois");
    	
    }	
 
 public static void main(String args[])
 {
 	Pai x = new Filha();
 	x.principal();
 	System.out.println(x.nome);
 }
 
	
}

Não entendi pq ele imprime o valor da variável da classe Pai e o método da classe Filha.
É pq eu instaciei uma nova variavel na classe Filha???
Se alguem souber me ajudar ... questão bem legal..

Abs[] Rodrigo........

6 Respostas

B

Kra, a resposta eu método eu tenho, é o seguinte:

O quando vc herda de uma classe e implementa um método com a mesma assinatura da classe pai, vc está fazendo oq chamamos de overwrite, ou seja vc está sobrescrevendo esse método. Acontece q o java tem o conehcimento do tipo da classe, mesmo q vc instacie de forma polirmófica como vc fez, ou seja, mesmo vc instanciando uma classe filha como pai, o java tem o conhecimento q a classe filha é do tipo filha, assim sendo ao chamar o metodo sobrescrito ele chama o metodo da classe filha, por isso a saída deve ser “dois”.

Qt ao atributo n eu n tenho conhecimento, é um caso a se pensar.

D

Mto obrigado acolon, mas minha duvida principal era justamente em relação ao atributo, pois acho que ele naum ta sobrepondo o nome pq estou declarando

na classe filha, se fosse o caso de herdar nao precisaria declarar novamente String nome!!!
Bastaria chamar a variável nome e atribuir o novo valor… concorda?

Abs[] Rodrigo…

B

Aí não ia rolar kra. Qt a isso tenho certeza. Se vc instaciar uma classe filha como sendo do tipo pai e tentar chamar um atributo da classe filha, mesmo q public, vai dá pau, ele n enxerga mesmo. Qd vc declarou duas variaveis do tipo String e com nomes iguais n significa q vc sobrescreveu uma, até pq isso seria absurdo, métodos podem ser sobrescritos, mas até onde eu sei variáveis n, acredito q a cioisa funcione assim:

Como uma variavel não pode ser sobrescrita, qd vc declara duas variaveis de tipos e nomes iguais nas classes filha e pai e instancai uma filha como sendo pai, o java só reconhece a do pai, afinal variaveis n sõ sobrescritas.

GOSTARIAD E DEIXAR CLARO Q ISSO EH UMA SUPOSIÇÃO, como disse n sei como eh esse mecanismo, já o do método q eu respondi antes tenho certeza pq ja estudei esse mecanismo.

D

Eh isso então, vlw pelas idéias Abs[]…

L

mais imprime o q na verdade um dois Edson?

E

Com Base no que o Rodrigo escreveu analise o resultado quando trabalhamos com atributos e métodos, com certeza essa questão irá cair na prova :

class Pai

{

public String nome=“Belem”;
public void imprime()

{

System.out.println(super-classe);

}

}
public class Filho extends Pai

{

public String nome=Gabriel;
public void imprime()

{

System.out.println(sub-classe);

}

public static void main(String args[])

{

Pai x = new Filho();

System.out.println(“Nome :” + x.nome); // o atributo vem da super-classe ( A resposta é Belém)

x.imprime(); // o metodo vem da sub-classe ( A resposta é sub-classe )

System.out.println(new Filho().nome); // (A resposta é o nome da classe filho = Gabriel)

new Pai().imprime(); // A resposta é o método da classe pai super-classe

}
}

ABS:
amigo
[email removido]

Criado 23 de dezembro de 2006
Ultima resposta 26 de dez. de 2006
Respostas 6
Participantes 4