2012-01-13 6 views
7

J'ai le scénario de hiérarchie de classe suivant; La classe A a une méthode et la classe B étend la classe A, où je veux appeler une méthode de super classe à partir d'une classe imbriquée localement. J'espère qu'une structure squelettique représentera le scénario plus clairement Est-ce que Java autorise de tels appels?Java Classes imbriquées locales et accès aux super-méthodes

class A{ 
    public Integer getCount(){...} 
    public Integer otherMethod(){....} 
} 

class B extends A{ 
    public Integer getCount(){ 
    Callable<Integer> call = new Callable<Integer>(){ 
     @Override 
     public Integer call() throws Exception { 
     //Can I call the A.getCount() from here?? 
     // I can access B.this.otherMethod() or B.this.getCount() 
     // but how do I call A.this.super.getCount()?? 
     return ??; 
     } 
    } 
    ..... 
    } 
    public void otherMethod(){ 
    } 
} 
+1

Etes-vous vraiment sûr de vouloir appeler les implémentations de méthodes surchargées de la classe externe à partir d'une classe interne? On dirait un vrai bordel pour moi. –

+0

@Tom Hawtin - Je crois que c'est bien une classe "locale anonyme" et non une classe "interne" - ce qui rend le désordre encore plus important. – emory

+0

@emory Techniquement, les classes internes anonymes sont des classes locales sont des classes internes. –

Répondre

21

Vous pouvez simplement utiliser B.super.getCount() pour appeler A.getCount() en call().

5

Vous avez à utiliser B.super.getCount()

4

Quelque chose le long des lignes de

package com.mycompany.abc.def; 

import java.util.concurrent.Callable; 

class A{ 
    public Integer getCount() throws Exception { return 4; } 
    public Integer otherMethod() { return 3; } 
} 

class B extends A{ 
    public Integer getCount() throws Exception { 
     Callable<Integer> call = new Callable<Integer>(){ 
      @Override 
      public Integer call() throws Exception { 
        //Can I call the A.getCount() from here?? 
        // I can access B.this.otherMethod() or B.this.getCount() 
        // but how do I call A.this.super.getCount()?? 
        return B.super.getCount(); 
      } 
     }; 
     return call.call(); 
    } 
    public Integer otherMethod() { 
     return 4; 
    } 
} 

peut-être?

Questions connexes