Ola pessoal, tenho uma dúvida relativamente simples para voces, mas eu nao entendi bem o construtor da classe…
Eu sei que quando eu instancio a classe o Construtor é chamado, posso fazer construtores com polimorfismo e etc. A dúvida veio quando eu tentei montar duas classes. vou tentar explicar o exemplo o mais simples possivel.
A Primeira Classe vou chamar de Classe1 ela é responsavel pela programação.
A Segunda classe vou chamar de Classe2 ela é responsavel pela Montagem do JFrame e seus objetos.
a Classe2 é mais ou menos assim
public class Classe2 extends JFrame {…
dentro dela tem um método chamado mostrarTela()
pulib void mostrarTela() {…
onde eu montei a tela.
a Classe1 é a principal, ontem tem o método main e ela extende a classe2
public class Classe1 extends Classe2 {…
agora no construtor da classe1 eu quero chamar o método montarTela da classe2, mas não da certo, da erro… fala que não pode encontrar o método.
Agora se na Classe dois eu colocar o construtor mesmo ele estando sem nenhuma programação no seu corpo
public Classe2() {
}
na classe1 eu chamo o método monstarTela(); ae funciona.
Alguem poderia me explicar o porque disso fazendo favor?
Obrigado a ajuda de voces
O método pode ser chamado sem problemas quando a classe é herdada, será que você não está chamando no método main um método que não é static?
Olá colega, em primeiro lugar, porque você fez a classe1 estender a classe2??
Se aúnica função da classe1 é executar a classe2, não há necessidade de ela existir, o método main() pode ficar na classe2 mesmo.
De qualquer forma, a chamada de métodos para a super classe é feita da segunte forma:
super.metodo();
Se você estava fazendo desta forma, tudo bem, mas tome cuidado com os construtores… todos os construtores da classe 2 chamam implicitamente pelo construtor padrao sem argumentos da classe1.
Bom, espero ter ajudado
Abraços!
Eu tenho uma dica… na classe1 que seria a principal…certo…faz assim antes de chamar a classe2 … classe1 <identificador kualker> = new classe1();
agora vc instaciou a classe1 herdando todas as outras classes do programa…Galera se eu tiver errado me corrijam… eu ainda to aprendendo tb… mas eu acho q isso vai funcionar…
Alex, pelo que eu pude entender, você não está por dentro de algumas peculiariedades dos construtores java.
Se você diz que sem incluir um construtor vazio para a Classe2 seu código não funciona, você deve ter caído no seguinte problema.
Toda vez que uma instância de uma classe é criada, primeiro ela inicializa suas variáveis de instância. Depois, ela começa a chamar os construtores padrão de suas classes pai a partir de Object.
Quando você explicitamente cria um construtor para uma classe, o construtor padrão deixa de existir.
Como Classe1 extende Classe2, se em Classe2 você definiu novos construtores e nenhum deles é do tipo Class2(), o que parece ser o caso, então ao tentar instanciar a Classe1, em algum momento ele vai tentar chamar o construtor padrão da Classe2 que não existe, gerando erro.
Para solucionar isso, ou você deixa esse construtor padrão na Classe2 vazio ou no construtor da Classe1, você faz a chamada a que construtor da Classe2() você quer chamar, em vez de deixar o Java escolher o padrão para você.
public class Classe1 {
public Classe1() {
super(quaisquer parametros que os construtores da classe2 recebam);
}
}
Note o super na chamada do construtor da classe1. Essa chamada, que deve estar na primeira linha, especifica que construtor da classe pai você que chamar. Se este código for omitido, imagine que o java automaticamente coloca um super() sem parâmetros para você.