Como acessar classes sem herança múltipla

6 respostas
G

Pessoal,

Pelo que pesquisei não existe herança múltipla em Java, correto?

O meu problema é o seguinte…tenho que cadastrar um livro, com sua editora e seu autor. Porém as classes editora e autor herdam os dados de uma classe chamada Cadastro. Paralelo a isso tenho duas outras classes: Endereço e Fone.
Na classe cadastro tenho 03 atributos:

public class Cadastro {
	
	private String nome;
	private Endereco endereco;
	private Fone fone;

E na endereço 05:

public class Endereco {
	
	private int categoria;
	private String rua;
	private String bairro;
	private String cidade;
	private String estado;

Quando seto e mostro os nomes da editora e o do autor não tenho problema algum pois uso a herança…

editora.setNome(JOptionPane.showInputDialog("Informe o nome da Editora: "));
autor.setNome(JOptionPane.showInputDialog("Informe o nome do Autor: "));

JOptionPane.showMessageDialog(null, "O nome da Editora é: "+ editora.getNome());
JOptionPane.showMessageDialog(null, "O nome do Autor é: "+ autor.getNome());

Porém quando vou setar e mostrar o endereço e/ou telefone é que está o problema, pois informo primeiro para editora e depois para o autor, e quando vou mostrar aparece tanto para editora como para autor o endereço do autor.

endereco.setRua(JOptionPane.showInputDialog("Informe a rua da Editora: "));
editora.setEndereco(endereco);

endereco.setRua(JOptionPane.showInputDialog("Informe a rua do Autor: "));
autor.setEndereco(endereco)

JOptionPane.showMessageDialog(null, "A rua da Editora é: "+ editora.getEndereco().getRua()); 
JOptionPane.showMessageDialog(null, "A rua do Autor é: "+ autor.getEndereco().getRua());

6 Respostas

D

Tanto o objeto editora quanto o objeto ator estão referenciando o mesmo objeto endereco. Por isso quando você exibe o endereço sempre vai aparecer o último informado.
Na composição dos objetos editora e ator use objetos endereco diferentes.

dm_thiago

É porque você está usando um único objeto.

endereco.setRua(JOptionPane.showInputDialog("Informe a rua da Editora: "));
editora.setEndereco(endereco);

endereco.setRua(JOptionPane.showInputDialog("Informe a rua do Autor: "));
autor.setEndereco(endereco)

JOptionPane.showMessageDialog(null, "A rua da Editora é: "+ editora.getEndereco().getRua()); 
JOptionPane.showMessageDialog(null, "A rua do Autor é: "+ autor.getEndereco().getRua());
Tente fazer assim:
enderecoEditora.setRua(JOptionPane.showInputDialog("Informe a rua da Editora: "));
editora.setEndereco(endereco);

enderecoAutor.setRua(JOptionPane.showInputDialog("Informe a rua do Autor: "));
autor.setEndereco(endereco)

JOptionPane.showMessageDialog(null, "A rua da Editora é: "+ editora.getEndereco().getRua()); 
JOptionPane.showMessageDialog(null, "A rua do Autor é: "+ autor.getEndereco().getRua());
G

Tinha feito assim antes, mas o professor disse que teria que fazer utilizando o mesmo objeto. E como estou aprendendo, to seguindo as orientações dele.

D

Talvez ele estivesse querendo te mostrar exatamente isto! Que com o mesmo objeto endereco a editora e o autor vao possuir o mesmo endereço.

dm_thiago

O mesmo objeto ou a mesma variável endereco? Se for a mesma variável dá para fazer assim:

endereco.setRua(JOptionPane.showInputDialog("Informe a rua da Editora: "));
editora.setEndereco(endereco);

endereco = new Endereco();

endereco.setRua(JOptionPane.showInputDialog("Informe a rua do Autor: "));
autor.setEndereco(endereco)

JOptionPane.showMessageDialog(null, "A rua da Editora é: "+ editora.getEndereco().getRua()); 
JOptionPane.showMessageDialog(null, "A rua do Autor é: "+ autor.getEndereco().getRua());
peczenyj

Prefira Composição a Herança

Criado 9 de abril de 2008
Ultima resposta 9 de abr. de 2008
Respostas 6
Participantes 4