Problemas com herança de classes

6 respostas
D

Olá pessoal estou com um novo problema

eu tenho duas classes , uma se chama “Bn” e a outra “Substituir”(que na verdade é um “JDialog” da “Bn”) , eu queria trabalhar com as duas em conjunto , por exemplo a classe “Substituir” e na verdade um sisteminha estilo bloco de notas mesmo , que eu estou tentando fazer , só que eu tenho que usar o “JTextArea” da classe “BN”.

Ai eu tentei usar o sistema de herança , Substituir extends Bn.

só que a classe “Substituir” herdou realmente tudo , gerando alguns conflitos , como o meu “JDialog” com menus da outra classe e por ai vai.

Eu gostaria de saber se tem como filtrar a herança de classes para mim só herdar os componentes que eu quiser.

Ou se existe outra maneira mais prática de resolver este problema.

Desde já agradeço.

6 Respostas

ViniGodoy

Use composição, não herança.

A herança tem o significado de é um. Se esse significado não existir, existem POUQUÍSSIMAS chances desse ser o melhor caminho.

Agora pergunte-se, Substituir é um Bn?

D

sobre a sua ultima pergunta nao entendi direito …

mas e em relação a composição , você pode me dar uma luz , de onde eu encontro algo a respeito. Porque eu sou iniciante e estou meio perdido nisso…

ViniGodoy

A relação de herança modela o é um. Por exemplo, no Java:

Todo o JFrame é um JComponent.
Todo JButton também é um JComponent.

Por isso, JFrame extends JComponent e
JButton extends JComponent.

Por isso podemos fazer:

JComponent x = new JButton(); //Ok, um botão é um componente

E por isso, JButton tem todas as características que um componente tem.

Tenta fazer a pergunta: Substituir é um Btn?
Teria sentido fazer:
Btn btn = new Substituir();
?

Se a resposta for não, então existem altíssimas chances de herança não ser adequada para o seu caso.

O ideal, então, é você usar composição. Ou seja, criar um objeto do tipo Bn dentro da classe substituir:

public class Bn { private Substituir subst = new Substituir(); //etc...etc..etc... public void onSubstituir() { substituir.setVisible(true); //Abre a dialog de substituir. }

D

a sim agora consegui entender um pouco o que você quis dizer , obrigado , vou tentar fazer aqui ,

em relação as classes , a classe "Bn" -> é o sistema de bloco de notas em si , com todos os componentes.

e a classe "substituir" -> seria um sistema de pesquisa e substituição igual ao notepad , ao qual eu quero que ele faça a pesquisa e substitua as Strings da classe principal, no caso "Bn".

ViniGodoy

Procure dar nomes descritivos as classes. Nomes que caras como eu (que não desenvolveram o sistema) podem simplesmente bater o olho e ter uma boa noção do que a classe faz.

Não poupe letras e nem dê nomes genéricos demais… principalmente hoje em dia, numa era em que as IDEs completam os nomes para vc.

D

vou começar a ficar mais atento em relação a isso , sou meio iniciante em programação em geral não só em java , ainda falta experiência xD.

mas eu testei aqui e funcionou certinho, eu fiz:

Bn bn = new Bn();

e matou a pau , mas eu tive que deixar o “JTextArea” com acesso “public” mas rodou direitinho , mais uma vez obrigado , e até a proxima dúvida.

Criado 18 de março de 2008
Ultima resposta 18 de mar. de 2008
Respostas 6
Participantes 2