Criar objectos de uma class abstrata

5 respostas
T

oi

tava prograando na minha biblioteca e me deparei com um problema na adição de utentes.É assim eu tenho uma class abstracta do tipo utente que tem como subclasses alunos, docentes, externos…como é que eu posso fazer para criar um novo objecto do tipo aluno por ex.eu axo que é do tipo

“Utente instance of Aluno”

mas desta maneira não dá para mandar os parametros que requer.

postem aí algo…

obrigado

-TUGA-

5 Respostas

L

Não entendi muito bem o que você quer… de qualquer forma, tenta entender esse código, cria um objeto de uma classe abstrata e faz uns testes de instanceof. Pelo menos foi nisso que pareceu ser sua duvida.

abstract class Utente {
	abstract void metodoAbstrato();
}

class Aluno extends Utente {
	void metodoAbstrato() {
		System.out.println("aluno");
	}
}

public class Teste {
	public static void main(String[] args) {
		Utente u1 = new Utente() {
			void metodoAbstrato() {
				System.out.println("criado na hora");
			}
		};
		Utente u2 = new Aluno();

		if(u1 instanceof Aluno) {
			System.out.println("u1 é aluno");
		}
		if(u2 instanceof Aluno) {
			System.out.println("u2 é aluno");
		}
		u1.metodoAbstrato();
		u2.metodoAbstrato();
	}
}
T

hum

entendi o seu códdigo e consegui fazer o que eu queria no meu!!!:slight_smile:

obrigado

-TUGA-

T

oi

eu pelo codigo que vc me mostrou em cima fiz o que queria mas foi de uma maneira que tenho de utilizar o “terminal window”(tou usando bluej) e eu queria fazer na bancada dos objectos e utizar a bancada dos objectos, mas o problema é o seguinte…

este é a class aluno (o inicio e construtor)

public class Aluno extends Utentes 
{
    private String curso;
    
    public Aluno(String nome, String codigo, String telefone, String morada, String ano_nascimento, String curso)
    {
    super(nome,codigo,telefone,morada,ano_nascimento);
    this.curso=curso;
    
    }

este é o meu metodo para adicionar um aluno numa class diferente

public void addAluno(){
       
       Aluno x = new Aluno(String nome, String codigo, String telefone, String morada, String ano_nascimento, String curso);
       
        if( this.existeUtente(x.getCodigo())); 
             
        else
             utente.put(x.getCodigo(), x);
    
            }

só que desta maneira está-me a dar erro…
alguém consegue dar um jeito aí??****sem utilizar a terminal window sff

postem aí alguma coisa

obrigado

-TUGA-

L

Eu não entendi o que vc quiz dizer com essa linha:

Aluno x = new Aluno(String nome, String codigo, String telefone, String morada, String ano_nascimento, String curso);

Aquele String nome, String codigo, vc não devia estar passando parametros ali ao inves de estar declarando ?! isso da erro de compilação.

De qualquer forma, ve se vc entende esses codigos, no primeiro eu sobrescrevi equals e hashcode de Utente para considerar o codigo como sendo a coisa que identifica um Utente, ou seja, dois Utente com mesmo código são iguais, idependente do nome, etc, utilizei uma List para armazenar os alunos e verifico se eles ja estão incluidos usando o método contains de List. No segundo eu não sobrescrevi equals e hashcode e usei um Map para salvar armazenar os alunos, usando como key o codigo dele.

Código 1 com List

abstract class Utente {
	private int codigo;

	private String nome;

	public Utente(int codigo, String nome) {
		this.nome = nome;
		this.codigo = codigo;
	}

	@Override
	public int hashCode() {
		final int PRIME = 31;
		int result = 1;
		result = PRIME * result + codigo;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Utente other = (Utente) obj;
		if (codigo != other.codigo)
			return false;
		return true;
	}
}

class Aluno extends Utente {
	private int curso;

	public Aluno(int codigo, String nome, int curso) {
		super(codigo, nome);
		this.curso = curso;
	}
}

public class Teste {

	List<Aluno> alunos = new ArrayList<Aluno>();

	boolean addAluno(Aluno aluno) {
		if (aluno == null)
			throw new IllegalArgumentException(
					"Não é possível adicionar um aluno nulo");

		if (alunos.contains(aluno))
			// aluno ja adicionado
			return false;

		alunos.add(aluno);
		return true;
	}

	public static void main(String[] args) {
		Teste t = new Teste();
		// crio dois alunos com codigo 1 e 2
		Aluno o1 = new Aluno(1, "aluno 1", 1);
		Aluno o2 = new Aluno(2, "aluno 2", 1);

		// insiro eles na lista
		System.out.println("Adicionei aluno com codigo 1: " + t.addAluno(o1));
		System.out.println("Adicionei de novo aluno com codigo 1: "
				+ t.addAluno(o1));
		System.out.println("Adicionei aluno com codigo 2: " + t.addAluno(o2));
	}
}

Usando Map

abstract class Utente {
	private int codigo;

	private String nome;

	public Utente(int codigo, String nome) {
		this.nome = nome;
		this.codigo = codigo;
	}

	public int getCodigo() {
		return codigo;
	}
}

class Aluno extends Utente {
	private int curso;

	public Aluno(int codigo, String nome, int curso) {
		super(codigo, nome);
		this.curso = curso;
	}
}

public class Teste {

	Map<Integer, Aluno> alunos = new HashMap<Integer, Aluno>();

	boolean addAluno(Aluno aluno) {
		if (aluno == null)
			throw new IllegalArgumentException(
					"Não é possível adicionar um aluno nulo");

		if (alunos.containsKey(aluno.getCodigo()))
			// aluno ja adicionado
			return false;

		alunos.put(aluno.getCodigo(), aluno);
		return true;
	}

	public static void main(String[] args) {
		Teste t = new Teste();
		// crio dois alunos com codigo 1 e 2
		Aluno o1 = new Aluno(1, "aluno 1", 1);
		Aluno o2 = new Aluno(2, "aluno 2", 1);

		// insiro eles na lista
		System.out.println("Adicionei aluno com codigo 1: " + t.addAluno(o1));
		System.out.println("Adicionei de novo aluno com codigo 1: "
				+ t.addAluno(o1));
		System.out.println("Adicionei aluno com codigo 2: " + t.addAluno(o2));
	}
}

Não existe o correto, usar Map ou List, implementar ou não equals, depende de sua analise… mas se o que vc queria era armazenar alunos não deixando armazenar dois com o mesmo código, ta ai duas formas de fazer…

T

si isso eu percebi…

mas no metodo add normalmente passa-se como parametro o “Aluno aluno”,mas na bancada de objectos(bluej) quando eu chamo os metodos do objecto(addAluno) ele me devolve na janela

main.addAluno(*******)

que tenho de por nos *** para ele criar um novo Aluno??
faça de conta que a class aluno é igual à sua (com nome, codigo e curso)

obrigado e postem aí qualquer coisa

-TUGA-

Criado 25 de junho de 2007
Ultima resposta 27 de jun. de 2007
Respostas 5
Participantes 2