SubClasse, posso fazer herança de 2 classe?

10 respostas
J

ae galera, blz…

bem, tenho uma super classe PESSOA, tenho uma sub classe FUNCIONARIO e tenho outra sub classe ALUNO, as 2 sub classe herdam da super classe PESSOA, esta correto?? é o q faco aqui, keria saber se meus conceitos estao certo… PESSOA -> Funcionario
|_> Aluno

, onde pessoa é a superclasse ou a subclasse??

bem, preciso fazer uma outra classe de cadastro q vai herdar tdo, mas como fazer isso??? posso usar dois EXTENDS?? herdar de 2 classes no msmo programa??? ou meus conceitos acima estao errado?? devo criar uma classe aluno, uma funcionario e a partir dai uma PESSOA?? seria assim, ou nao?? vcs entenderam?? como posso fazer uma classe cadastro p/ cadastrar uma nova pessoa, sendo ela funcionario ou aluno, mas para isso, teria de herdar de + de uma classe… como fazer… a seguir, os codigos…

public class Pessoa
{
	public String nome, cor;
	public int idade;
	public double altura, peso;
	public Pessoa(String nome, String cor, int idade, double altura, double peso)
	{
		this.nome = nome;
		this.cor = cor;
		this.idade= idade;
		this.altura = altura;
		this.peso = peso;
//		this.eixos = eixos;
	}
	
	public String toString()
	{
		String s = "\nNome " + nome + "\nCor " + cor + "\nIdade " + idade +
			"\nAltura: " + altura + "\nPeso: " + peso;
		return s;
	}
	
	static public void main(String[] args)
	{
		Pessoa x = new Pessoa("Juliano", "branco", 23, 1.83, 75.5);
		System.out.println("Caracteristicas da pessoa: " + x);
		// eh o mesmo que System.out.println("Características da pessoa: " + x.toString());
	}
}
public class Funcionario extends Pessoa
{
	public String cargo;
//	public double salario;
	
	public Funcionario(String nome, String cor, int idade, double altura, double peso, String cargo)
	{
		super(nome, cor, idade, altura, peso);
		this.cargo = cargo;
	//	this.salario = salario;
	}
	
	public String toString()
	{
		String s = super.toString();
		s += "\n#cargo " + cargo + "\n";
		return s;
	}
	
	static public void main(String[] args)
	{
		Pessoa x = new Funcionario("Juliano", "branco", 23, 1.83, 75.5, "CPD");
		System.out.println("Caracteristicas do Funcionario: " + x);
		
		// herda tdo de PESSOA, s/ nada de funcionario
		
	}
	
}
public class Aluno extends Pessoa
{
	private String curso;
	private int ra;

	public Aluno(String nome, String cor, int idade, double altura, double peso, String curso, int ra)
	{
		super(nome, cor, idade, altura, peso);
		this.curso = curso;
		this.ra = ra;
	}

	public String toString()
	{
		String s =  super.toString();
		s += ("\nCurso: " + curso + "\nRA: " + ra);
		return s;
	}

	static public void main (String[] args)
	{
		Pessoa x = new Aluno("Juliano", "branco", 23, 1.83, 75.5, "Redes", 27658);
		System.out.println("Caracteristicas do aluno: " + x);
	}
}

blz galera… espero q tenha explicado direito… aguardo e agradeço muito desde ja…

valews… :?:

10 Respostas

J

ae galera, blz…

bem, tenho uma super classe PESSOA, tenho uma sub classe FUNCIONARIO e tenho outra sub classe ALUNO, as 2 sub classe herdam da super classe PESSOA, esta correto?? é o q faco aqui, keria saber se meus conceitos estao certo… PESSOA -> Funcionario
|_> Aluno

Sua lógica está certa, como a momenclatura também.

Como vc mesmo descreveu Pessoa é uma Super Classe.

Vc pode estender (extends) apenas uma classe. Agora para vc fazer um cadastro é necessário apenas instânciar a classe Funcionario ou Aluno. A classe Pessoa é apenas uma generalização para outras classes mais espeficíficas (neste caso: Funcionario e Aluno).

Blz???

:wink:

J

blz kra… entendi o q vc kis dizer… Só q eu nunca instanciei nada kra… como q faço isso??

eu vow fazer uma novo arquivo chamado CADASTRO… ele vai ser extendido de PESSOA, p/ eu realizar o cadastro??

e como faço p/ eu instanciar?? p/ eu usar os atributos de ALUNO e FUNCIONARIO no meu novo arquivo CADASTRO??? nunca fiz isso kra…

aguardo … valews…

:?:

D

vc pode fazer uma classe herdar de duas ao mesmo tempo como vc disse, no caso vc tem a classe Funcionario que ‘extends’ a super classe Pessoa, digamos q vc keira criar outra classe q herde os atributos de Funcionario, vc pode, e esta classe no caso tbm estaria herdando os atributos da super classe Pessoa, explicando assim fik dificil, mas atraves de diagramas fik mais facil
oq vc nao pode eh fazer dois extends pra uma classe soh entendeu? java nao suporta herança multipla :slight_smile:

não sei se era essa sua duvida, espero ter ajudado…

T

Bom seguinte… vc tem que enteder melhor com modelar…

vamos lá…

vc tem uma classe… Pessoa… isso tá perfeito (conceitualmente)

ai vc tem + 2 classes… Funcionário, Aluno… bom c vc parar pra pensar
tanto funcionário como Aluno são pessoas… entaum… qual a logica???

Funcionario extends Pessoa
Aluno extends Pessoa

isso ocorre pq Aluno tb é uma pessoa…

porem… a classe cadastro… ela naum é nem um funcionário… nem muito menos um aluno… e menos ainda uma pessoa…

ou seja… vc naum tem que extender nem 1 … nem outro…

mas se vc parar pra pensar… um cadastro contém funcionario e contem Alunos… e os 2 são pessoas…

ou seja… vc tem q colocar um cmapo Pessoa no seu cadastro…

e não extender…

espero que tenha entendido

(e quanto a sua pergunta… não é possivel extender 2 classes… vc pode implementar infinitas classes… mas só pode extender 1)

J

entendi sim kra… blz… conceitualmente tdo OK… agora o problema é a implementacao…

vow colocar o campo pessoa na minha classe cadastro, mas como faço isso?? ele nao vai dar erro na hra de procurar, nao vai dizer q esta faltando declarar os campos. ou seja, como q faco p/ colocar esse campo pessoa, no meu cadastro… e no caso, qdo for cadastrar, tem campos q apenas a classe aluno contem, como q faco depois?? tenho q criar um campo aluno tb???

aguardo kra… p/ poder finalizar… conceitualmente OK , agora ta protica to meio verde ainda… valews e aguardo…

juliano :?

T

digamos q a classe pessoa tenho um código... ok??

ai sua classe cadastro poderia ser algo assim
public class Cadastro {
   private Vector pessoas = new Vector();
   
   public void cadastrar(Pesssoa pessoa) {
      pessoas.add(pessoa);
   }
   
   public Pessoa getPessoa(int id) {
      for (int i = 0; i < pessoas.size(); i++) {
          if (pessoas.elementAt(i).getCodigo() == id)
              return (Pessoa)pessoas.elementAt(i).getCodigo();
      }
      return null;
   }

   public Aluno getAluno(int id) {
      Pessoa p = getPessoa(id);
      if ((p == null) && (!(p instanceof Aluno)))
          return null;
      else
          return (Aluno)p;
   }

   public Funcionario getFuncionario(int id) {
      Pessoa p = getPessoa(id);
      if ((p == null) && (!(p instanceof Funcionario)))
          return null;
      else
          return (Funcionario)p;
   }
}

ai vc pode cadastrar diversas pessoas....

e buscar a pessoa cadastrada pelo código....

pode buscar diretamente funcionário
e aluno....

no caso de o código não existe... volta nulo...
no caso da pessoa não ser funcionário ... getFuncionário retorna null
e o mesmo pra getAluno...

isso dai é a meneira de ser fazer um cadastro...

ai vc guarda objeto ... e retorna os objeto...
=]

espero q tenha entendido

J

e ae, kra… blz…

bem, fiz isso… coloquei o codigo… criei um outro arquivo, certo, com o nome de Cadastro… Entao vow ficar com 4 arquivos(classes)??

mas, veja só a lista de erros:

-Called Compiler C:\J2SDK1~1.1_0\bin\javac.exe-

-Target File: C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java-

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:8: cannot resolve symbol

symbol  : class Pessoa

location: class Cadastro

public void cadastrar(Pessoa pessoa) {

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:12: cannot resolve symbol

symbol  : class Pessoa

location: class Cadastro

public Pessoa getPessoa(int id) {

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:20: cannot resolve symbol

symbol  : class Aluno

location: class Cadastro

public Aluno getAluno(int id) {

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:28: cannot resolve symbol

symbol  : class Funcionario

location: class Cadastro

public Funcionario getFuncionario(int id) {

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:14: cannot resolve symbol

symbol  : method getCodigo ()

location: class java.lang.Object

if (pessoas.elementAt(i).getCodigo() == id)

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:15: cannot resolve symbol

symbol  : class Pessoa

location: class Cadastro

return (Pessoa)pessoas.elementAt(i).getCodigo();

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:15: cannot resolve symbol

symbol  : method getCodigo ()

location: class java.lang.Object

return (Pessoa)pessoas.elementAt(i).getCodigo();

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:21: cannot resolve symbol

symbol  : class Pessoa

location: class Cadastro

Pessoa p = getPessoa(id);

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:22: cannot resolve symbol

symbol  : class Aluno

location: class Cadastro

if ((p == null) && (!(p instanceof Aluno)))

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:25: cannot resolve symbol

symbol  : class Aluno

location: class Cadastro

return (Aluno)p;

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:29: cannot resolve symbol

symbol  : class Pessoa

location: class Cadastro

Pessoa p = getPessoa(id);

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:30: cannot resolve symbol

symbol  : class Funcionario

location: class Cadastro

if ((p == null) && (!(p instanceof Funcionario)))

^

C:\ProgJava\Trabalho\juliano\tramp\Cadastro.java:33: cannot resolve symbol

symbol  : class Funcionario

location: class Cadastro

return (Funcionario)p;

^

13 errors

-Finished-

acho q ele nao recconheceu nem funcionario, nem pessoa, nem aluno… e os nomes, estao OK…

q deve ser procedido??

aguardo…

T

Bom fiz como um exemplo… pra vc enteder o procedimento…

cara te aconselho a baixar o eclipse… c não vc vai morrer tentando debugar…

esse erro ai não sei pq deu… as suas outras classes estão no diretorio de Cadastro??/

o mais importante é vc ter entendido o código

vou indo…
abraços

J

kra, eskece tdo isso q te mandei… recompilei ele via console e OK, mas tem 2 erros ainda:

e estao apontando p/ o elementAt(i) da classe getPessoa.

da : cannot resolve symbol
location: java.lang.Object…

q pode ser isso kra…

e depois, no Main, o q vow colocar p/ funcionar esta classe cadastro?? tenho q instanciar?? como??

aguardo e vales msmo

T

ó crio q o unico problema é q tem q importar a classe Vector… e como eu não escrevi isso no código… vc tb não deve ter o feito…

import java.util.Vector;

axo q só falta isso…

bom… depois como vc faiz no mai??.. ai vai depender de vc =]

mas vc intancia a classe cadastro assim…

Cadastro cadastro = new Cadastro();

ai é só usar…

vc cria um pessoa… e depois faz…

cadastro.add(pessoa);

essa pessoa pode ser tanto um Funcionário como um Aluno…

pelo conceito de polimofismo… vc poderá fazer

cadastro.add(aluno);

cadastro.add(funcionario);

sem problema nenhum…

agora a maneira de construir alunos e funcionários… isso ta definido dentro das classes deles…

=]

lembre-se que eu supos que tinha um método… getCode() … na classe pessoa =]

abraços…

“Julianodb”:
kra, eskece tdo isso q te mandei… recompilei ele via console e OK, mas tem 2 erros ainda:

e estao apontando p/ o elementAt(i) da classe getPessoa.

da : cannot resolve symbol
location: java.lang.Object…

q pode ser isso kra…

e depois, no Main, o q vow colocar p/ funcionar esta classe cadastro?? tenho q instanciar?? como??

aguardo e vales msmo

Criado 23 de março de 2004
Ultima resposta 24 de mar. de 2004
Respostas 10
Participantes 4