Eu estava aqui pensando com meus botões, mas não lembrei se é possível fazer o q eu estou querendo.
Vcs sabem me dizer se tem alguma maneira de forçar, as classes q extendem uma determinada classe, a a implementacao de sobrecarga(overload) de um metodo escrito na classe pai?
Ex:
Tenho um metodo na classe A chamado habilitaCampos(), o qual habilita um campo de Id. O q eu gostaria 'e de forcar a classe B, q extende A, dar um overload desse m’etodo com os seus proprio campos tb, entemde?
Alguem sabe se 'e possivel?
Eu estava aqui pensando com meus botões, mas não lembrei se é possível fazer o q eu estou querendo.
Vcs sabem me dizer se tem alguma maneira de forçar, as classes q extendem uma determinada classe, a a implementacao de sobrecarga(overload) de um metodo escrito na classe pai?
Ex:
Tenho um metodo na classe A chamado habilitaCampos(), o qual habilita um campo de Id. O q eu gostaria 'e de forcar a classe B, q extende A, dar um overload desse m’etodo com os seus proprio campos tb, entemde?
Alguem sabe se 'e possivel?[/quote]
Suponho que queira dizer override (sobreescrita : reescrever o mesmo método com os mesmos parametros ).
Isso só é possivel se o método for abstrato. Mas se ele for abstrato ele não pode implementar nenhum codigo.
Se A é abstrata com o método habilitaCampos() abstrato, então B é forçada a implementar habilitaCampos() (ou a ser abstrata ela propria)
Se A é uma classe comum e habilitaCampos() tem algum codigo lá dentro que vc tb quer que B use, então a solução é deixar habilitaCampos e mover esse código para métodos protegidos de A (métodos utilitários)
Ai B seria forçada a implementar habilitaCampos e poderia usar os métodos definidos por A.
Outra maneira seria criar uma interface e fazer tanto A como B a implementar. O problema seria se B extendesse A. Ocorreria que se A implementa a interface, B não é obrigada a implementar, assim já nao serviria p o que vc quer.
Teve uma pessoa q falou override ali em cima, mas não foi o q eu disse.
Interface não pode ser pois eu quero de fato extender a classe, pois nela tem uns métodos implementados, atributos q serão usados em todas as classes filhas…ou seja, tenho q extender.
O q eu queria era de fato forçar o overload de um método sem usar interface, pois eu precisaria q a pessoa sobrecarregasse assim:
public void método(var var){
super();
//resto de implementação específica
//ex: txtDescricao.setText("teste");
}
[quote=riaranha]
O q eu queria era de fato forçar o overload de um método sem usar interface, pois eu precisaria q a pessoa sobrecarregasse assim:
public void método(var var){
super();
//resto de implementação específica
//ex: txtDescricao.setText("teste");
}
[/quote]
Se vc quer que a classe filha redefina (re-escreva) um método - que é o que o seu exemplo está fazendo (embor o uso de super esteja errado) - isso se chama override (sobre-escrever).
Overload (sobrecarga) acontece quando vc define um método com nome igual mas parâmetros diferentes. Por exemplo:
class A {
metodo (int a){}
}
class B {
metodo (double a){}
metodo (int a, int b ){}
}
Aqui a classe B está fazendo overload do método de A. Para forçar este efeito vc usar interfaces . Assim:
interface I {
metodo (double a);
metodo (int a, int b );
}
class B implements I {
metodo (double a){}
metodo (int a, int b ){}
}
Para conseguir o efeito que vc mostrou no seu exemplo não existe forma em java a menos que vc implemente um esquema de anotações para isso . Assim
class A {
@MustOverride
metodo (int a){}
}
class B {
@Override
metodo (int a){}
}
Contudo, este tipo de esquema (que existe no .NET) é pernicioso e viola os conceitos de Herança pq vc está forçando que se herde o codigo e não a funcionalidade.
Resumindo, é possivel força o override , mas não é simples e no fim é uma má prática.