Overload

Olá pessoal!!

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=riaranha]Olá pessoal!!

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.

Att
Marck

Como você disse, forçar uma implementação (INTERFACE)

Bom, acho q não tem msm o q fazer…

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){}

}

A anotação @Override já existe em java. Vc pode criar a outra e um esquema que força o override durante a compilação.
P.S. Você pode fazer isto usando a Annotations Processing Tool
http://java.sun.com/j2se/1.5.0/docs/guide/apt/index.html

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.