Trabalhar com Herança, atribuiçao e metodos polimorficos

Ola galera… gente eu to meio enrolado (oh novidade!!) a respeito de herança e atribuiçao…

eu criei a seguinte classe:


class Pessoa{
    String nome;
    char sexo;
    Pessoa(){} // construtor sem parametros/sem corpo
    Pessoa(String n, char s){ // outro construtor / inicializa os campos
        nome=n;
        sexo=s;
    }
    
    public void exibe(){ // metodo
        System.out.println("Nome:"+nome);
        System.out.println("Sexo:"+sexo);
    }   
    
}//Fim Pessoa

Depois a testei:


class TestaPessoa{
	public static void main(String args[]){
	    Pessoa p1, p2; //declarcao de tipo de objetos
	    p1=new Pessoa();// construtor sem paramentros
	    p2=new Pessoa("Pedro Cabral", 'm');//construtor com parametros
	    System.out.println("Foram criados os objetos:");
	    p1=p2; //atribuicao de obejtos
	    p1.exibe(); // mensagem a metodo para objeto p1
	    p2.exibe(); // mensagem a metodo para objeto p2
	    p1.nome="Pero Vaz"; // alteracao de propriedade
	    p2.exibe();
	}
}

Gostaria que alguem me ajudasse a trabalhar dessa forma a seguir com herança.

  • Criar um aplicativo q contem 3 classes: Pessoa( ja fiz), Ator e Aluno.

Na classe Ator especializa a classe Pessoa(vejam o modelo q fiz), adicionando o campo String contato.

Na classe Aluno especializa a classe Pessoa, adicionando um campo int numMatric.

Cada classe deve conter conter pelo menos dois construtores (parametrizados/nao parametrizado) e o metodo exibe() que exibe todos os dados. Nas classes derivadas, tanto o construtor parametrizado quanto o metodo exibe() devem invocar o correspondente da super classe (Pessoa).

Por favor, se fizerem todo, tentem compilar… usem a classe teste… se puderem dar esse força pra esse humilde aprendiz eu fico grato…

um grande abraço a todos.

MigMax

Pessoal, eu ja comecei… mas cm disse estou me enrolando na hora de chamar o metodo exibe… cm manda invocar da classe Pessoa.

olhem o que ja fiz…


class Ator extends Pessoa{
	
	String contato;	
	Ator(String _nome, char _sexo, String _contato){
	    super (_nome,_sexo);
	    contato=_contato;
	}
	Ator(){}
	public void ExibeAtor(){
	    System.out.println("Nome e Sexo:");
	}

}

Nao sei mais como chamar isso… ja tentei ate onde meu conhecimento vai.

MigMax


class Ator extends Pessoa{
	
	String contato;	
	Ator(String _nome, char _sexo, String _contato){
	    super (_nome,_sexo);
	    contato=_contato;
	}
	Ator(){}
	public void ExibeAtor(){
	    exibe(); //Este método é da superclasse Pessoa, que irá imprirmir Nome e Sexo
            System.out.println("Contato:"+contato); 
	}

}

É só vc chamar o método exibe(); da superclasse e adicionar a impressão do contato, como vc pode ver no código acima… blz?

Cara tu é muito fera sabia…

Valeu mesmo.

MigMax

Pessoal,

Agora como faria por exemplo um aplicativo que pudesse conter as tres classes? eu sei a classe testaPessoa instancia um objeto… mas quando tento fazer o mesmo para as outras dá erro.

Alguem sabe cm fazer o aplicativo contendo as tres?

Eis as classes:

Pessoa:


class Pessoa{
    String nome;
    char sexo;
    Pessoa(){} // construtor sem parametros/sem corpo
    Pessoa(String n, char s){ // outro construtor / inicializa os campos
        nome=n;
        sexo=s;
    }
    
    public void exibe(){ // metodo
        System.out.println("Nome:"+nome);
        System.out.println("Sexo:"+sexo);
    }   
    
}//Fim Pessoa

Ator:


class Ator extends Pessoa{
	
	String contato;	
	Ator(String _nome, char _sexo, String _contato){
	    super (_nome,_sexo);
	    contato=_contato;
	}
	Ator(){}
	public void ExibeAtor(){ 
       exibe(); //Este método é da superclasse Pessoa, que irá imprirmir Nome e Sexo 
            System.out.println("Contato:"+contato); 
   } 


}

Aluno:


class Aluno extends Pessoa{
	
	int numMatric;	
	Aluno(String _nome, char _sexo, int matric){
	    super (_nome,_sexo);
	    numMatric=matric;
	}
	Aluno(){}
	public void ExibeAluno(){ 
       exibe(); //Este método é da superclasse Pessoa, que irá imprirmir Nome e Sexo 
            System.out.println("Matricula:"+numMatric); 
   } 


}

MigMax

[quote=“MigMax”]Pessoal,

Agora como faria por exemplo um aplicativo que pudesse conter as tres classes? eu sei a classe testaPessoa instancia um objeto… mas quando tento fazer o mesmo para as outras dá erro.
[/quote]

Posta o código pra gente vê onde está dando o erro… blz? :wink:

brohter, eu nao sei se estou fazendo correto. eu peguei o exemplo da classe TestaPessoa, declarei os obj Ator contr1 e Aluno matric, só que quando tentei colocar lá na frente agora nao dá mais erro… parece até q meu compilador tem medo de vc… hehehe

Olha so o codigo q fiz…



class Aplicativo{
	public static void main(String args[]){
	    Pessoa p1, p2; //declarcao de tipo de objetos
	    Ator contr1;// delcaracao do tipo do objeto
	    Aluno matric;//declaracao do tipo do obejto.
	    p1=new Pessoa();// construtor sem paramentros
	    p2=new Pessoa("Pedro Cabral", 'm');//construtor com parametros
	    System.out.println("Foram criados os objetos:");
	    p1=p2; //atribuicao de obejtos
	    p1.exibe(); // mensagem a metodo para objeto p1
	    p2.exibe(); // mensagem a metodo para objeto p2
	    p1.nome="Pero Vaz"; // alteracao de propriedade
	    p2.exibe();
	    contr1=new Ator();
	    matric=new Aluno();
	    contr1.ExibeAtor();
	    matric.ExibeAluno();
	    
	}
}

Na tela:


Foram criados os objetos:

Nome:Pedro Cabral

Sexo:m

Nome:Pedro Cabral

Sexo:m

Nome:Pero Vaz

Sexo:m

Nome:null

Sexo:

Tem como eu melhorar isso… acho que ainda nao tá legal… deveria aparecer algo nao é irmao?

MigMax

Blz manu?

No construtor sem argumentos, set os atrinutos da superclasse e da classe subclasse como vazios, como são Strings, basta vc atribuir “”… blz?

Outra coisa… ficaria melhor vc declararar todos os atributos como private, e criar os métodos set e get deles… assim vc não manipula diretamente os atributos e sim a através de métodos… arquiteturalmente fica muitas mais elegante tb… entre muitas outras vantagens… blz?

ai irmao… nao leva a mal nao… mas voei legal no que vc disse!!!

Dá pra fazer um exemplo… ainda nao consigo falar bem essa lingua… lembre-se que to aprendendo. hehee

MigMax :roll: