Problemas na Herança. Imprimir Atributos da superClasse a partir da subclasse

boas pessoal. Preciso imprimir atributos superclasse a partir da subclasse.
exemplo:

public class Utente {
 protected String nome;
 protected String apelido;

//getters e Setters do nome e apelido

}

public class utilizador extends utente{
  //outros abributos


public void imprimirDados(){
  system.out.println("Nome: " + getNome());
system.out.println("Apelido: " + getApelido());
}
}

No main: utilizador u.imprimirDados(); só imprime NULL para os atributos herdados do Utente.

Solução que tenho é percorrer as 2 listas que contem as classes utente e utilizador e imprimir os atributos separados. Será que tem como obter os atributos dentro da classe filha?

public static void listarUtilizador() {
	System.out.println("\tLista Utilizadores: ");
	for (Utilizador aux : listaUtilizador) {
		for (Utente ux : listaUtente)
			if (aux.getBi() == ux.getBi()) {
				aux.imprimirDados();
				ux.imprimirDados();
			}
	}
}

image

image

Isso foi 1 erro de escrita. No codigo esta certo.
:slight_smile:

Quando posta código no fórum, formate o mesmo utilizando o botão </>

Essa sintaxe aí está errada, posta o código que você realmente tem executando.

public class Utente{
    protected int bi;
    protected String nome;
    protected String apelido;
    protected String morada;
    }

public class Utilizador extends Utente{
	protected int bi;
	protected int numeroUtilizador;
	protected username;
	protected password;

public void imprimirDados(){
	system.out.println("Nome: " + getNome());
	system.out.println("Apelido: " + getApelido());
}

Yah man. Obrigado pela dica.

Faltou a classe com o método main, que é onde você usa as classes que postou.

O código que você postou também parece incompleto, você chama métodos getNome() e getApelido(), mas eles não estão declarados em nenhum lugar.

Ola, os getters() e setters() estao todos definidos nas suas classes respectivas.
No problema que estou a ter. É quando tenho o objecto Utilizador dentro de um metodo que é um menu, e quero imprimir os atributos do Utilizador e do Utente que ele herdou.

exemplo:

public static void menuUtilizador(Utilizador utilizador){
 	System.out.println("\n\t1. Ver Perfil\n\t2. Alterar Dados\n\t3. Outras Opcoes");
    System.out.println("\n\n\tEscolha uma Opcao: ");
	opcao = sc.next();
    switch (opcao.charAt(0)) {
    case '1':
    	utilizador.imprimirDados();
    	break;
    default:
     break;
  }
}

E quando chamo o metodo imprimirDados() do Utilizador tem como imprimir os atributos herdados da classe Utente?

Por que você não posta o código completo de suas classes?

Tem sim, é só você sobrescrever o método imprimirDados() da classe Utilizador e imprimir os atributos da herdados…

Cadê o código que instanciou esse Utilizador?
Cadê o código que chamou esse método?

Ola, consegui corrigir o problema. Quando tiver problemas é melhor postar o codigo inteiro? É que na classe principal tenho muitas linhas d codigo…
O problema era o seguinte:
Estava a instanciar os objectos do tipo Utente com o construtor Utente(bi, nome, morada, sexo, perfil) e caso for Utilizador estava a utilizar o contrutor do Utilizador(bi, username, password). E cada um seria colocado numa arraylist diferente. O que iria os ligar era o BI.

Fiz isso na prespectiva da criacao de tabelas na base de dados.
Entao mudei para a seguinte forma:

public abstract class Utente{
protected String nome;
protected String apelido;
protected String morada;
protected String naturalidade;
protected char sexo;

//construtor getters e setters
}

public class Utilizador extends Utente{
protected int codigoUtilizador;
protected String username;
protected String password;
protected String perfil;


Utilizador(nome, apelido, morada, naturalidade, sexo, perfil){
super(nome, apelido, morada, naturalidade, sexo);

}
//getters e setters
}

public class Temporario extends Utente{

Temporario(nome, apelido, morada, naturalidade, sexo){
super(nome, apelido, morada, naturalidade, sexo);
}
}

Tanto o Utilizador como o Utente irao ficar nos arraylist correspondentes.
Seria melhor criar uma topico com todas as classes e os codigos e postar aqui, assim em caso de receber ajuda ja têm onde contextualizar?

Agora surgiu o seguinte problema:
Ao utilizar a heranca:
Utilizador extends Utente{}
Temporario extends Utente{}

Na base de dados, a tabela utilizador nao ira ficar normalizada. Visto que ira ter todos os atributos herdado do Utente.

tbl_Utilizador{bi, nome, apelido, morada, naturalidade, sexo, numeroUtilizador, username, password, perfil, estado, dataRegisto}

Estive a pesquisar, e uma das formas de resolver isso, seria utilizar a composicao em vez de herança.

Alguma dica ai?