En Java, les classes anonymes peuvent-elles étendre une autre classe?

Code de la forme:

protected Interface1 varClass1 = new Interface1() {

Mais j'aimerais aussi que cette anonyme imbriquée classe étend la classe Base, quelque chose comme:

protected Interface1 varClass1 = new Interface1() extends Base {
....

est-ce possible en Java?

25
demandé sur Maehler 2012-05-07 12:34:31
la source

2 ответов

une classe anonyme peut soit implémenter exactement une interface ou étendre une classe.

une solution consiste à créer une classe nommée qui s'étend Base et des outils Interface1, et ensuite l'utiliser comme classe de base pour la classe anonyme:

public abstract class Base1 extends Base implements Interface1 {}

...

protected Interface1 varClass1 = new Base1() {
   ...
28
répondu NPE 2012-05-07 13:41:06
la source

bien qu'il ne soit pas possible à la fois d'étendre une classe et d'implémenter une interface, ce que vous devez probablement faire peut être réalisé en utilisant délégation.

il suffit de créer une instance de Base dans l'initialiseur de votre classe anonyme et l'utilisation de ses méthodes dans les méthodes à mettre en œuvre à partir de Interface1.

EDIT: Ma réponse suppose que vous ne voulez hériter de Base à cause de son implémentation, pas à cause de son interface. C'est une hypothèse valide étant donné que l'interface de Base n'est pas visible après avoir assigné l'objet à un Interface1 variable. Donc, je pense qu'il est préférable d'utiliser la délégation ici, au lieu de créer une nouvelle classe.

3
répondu rolve 2012-05-07 15:49:54
la source

Autres questions sur