[RESOLVIDO]Acessar método SET de uma subclasse

7 respostas
williamdasflores

Boa noite Galera!

Tenho uma classe Pessoa:
public class Pessoa {
	private String nome;
	private int idade;
	
	public Pessoa(String nome, int idade)
	{
		this.nome = nome;
		this.idade = idade;
	}
	
	public Pessoa()
	{
		this.nome = null;
		this.idade = 0;
	}
	
	public String getNome()
	{
		return nome;
	}
	public void setNome(String nome)
	{
		this.nome = nome;
	}
	
	public int getIdade()
	{
		return idade;
	}
	public void setIdade(int idade)
	{
		this.idade = idade;
	}
}
Tenho uma classe Amigo que extends de Pessoa:
public class Amigo extends Pessoa {
	private String dataAniversario;
	
	public Amigo()
	{
		this.dataAniversario = null;
	}
	
	public String getDataAniversario()
	{
		return dataAniversario;
	}
	public void setDataAniversario(String dataAniversario)
	{
		this.dataAniversario = dataAniversario;
	}
E tenho uma classe Agenda
public class Agenda{
	Pessoa pessoas[];
	private int i = 0;
	private int quantAmigos = 0;
	private int quantConhecidos = 0;
	private int aleatorio = 0;
	
	public Agenda(int tamanho)
	{
		pessoas = new Pessoa[tamanho];
		for(i = 0; i < pessoas.length; i++)
		{
			aleatorio = 1+(int)(Math.random()*2);
			if(aleatorio == 1)
				pessoas[i] = new Amigo();
			else if(aleatorio == 2)
				pessoas[i] = new Conhecido();
		}
	}
	
	public void addInformacao()
	{
		Scanner sc = new Scanner(System.in);
		for(i = 0; i < pessoas.length; i++)
		{
			System.out.println("Digite o nome da posição "+i);
			String nome = sc.next();
			System.out.println("Digite a idade da posição "+i);
			int idade = sc.nextInt();
			
			if(pessoas[i] instanceof Amigo)
			{
				System.out.println("Digite o aniversário DD/MM/AA");
				String aniversario = sc.next();
				pessoas[i].setDataAniversario(aniversario); //aqui esta dando erro
			}
Algume pode me dizer como faço para poder acessar o metodo set da classe Amigo????

7 Respostas

brunorota

Então você só vai conseguir acessar o método set da classe Amigo se você tiver uma classe Amigo

Você usou o polimorfismo, o comportamento é o seguinte

Pessoa pessoa = new Amigo();

quando você faz isso você só pode acessar os métodos que pertencem a classe Pessoa

No seu caso basta alterar o seu código, em vez de ter um array de Pessoa, você terá um array de Amigo

Amigo amigos[];

é isso ae

williamdasflores

e no caso se eu tiver uma classe Conhecido que também extends de Pessoa

Ai no array de pessoas eu preciso colocar os conhecidos e os amigos???

brunorota

faz isso entao

((Amigo)pessoas[i]).setDataAniversario(aniversario);

você faz o mesmo para utilizar o get

G

se resolveu, edita o 1 post e coloca como RESOLVIDO

williamdasflores

Eu sei…quando solucionar minha dúvida eu coloco “RESOLVIDO”.

brunorota
Isso que vc fez é um cast?

williamdasflores

Como eu tinha duplicado o tópico sem querer, me responderam no outro tópico a minha dúvida acima.

Obrigado a todos!!

brunorota

Sim

Eu preciso disso pra poder acessar os métodos da classe Amigo, se eu tentar acessar com a referência de Pessoa só, eu nó vou ter acesso as métodos que tem nas duas classes Pessoa e Amigo, ou seja apenas os métodos que se encontram na classe Pessoa.

O Casting é válido porque você criou um objeto com o new Aluno();

pessoas[0] = new Pessoa();
Amigo amigo = (Amigo) pessoa[0];

Esse código acima da erro, porque Pessoa NÃO é um Amigo, e sim Amigo É uma Pessoa

Criado 12 de maio de 2011
Ultima resposta 13 de mai. de 2011
Respostas 7
Participantes 3