Локальные вложенные классы Java и доступ к супер методам - PullRequest
7 голосов
/ 13 января 2012

У меня следующий сценарий иерархии классов; Класс A имеет метод, а класс B расширяет класс A, где я хочу вызвать метод из суперкласса из локально вложенного класса. Я надеюсь, что скелетная структура более четко отображает сценарий Разрешает ли Java такие вызовы?

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

Ответы [ 3 ]

21 голосов
/ 13 января 2012

Вы можете просто использовать B.super.getCount() для вызова A.getCount() в call().

5 голосов
/ 13 января 2012

Вы должны использовать B.super.getCount()

4 голосов
/ 13 января 2012

Что-то вроде

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;
    }
}

возможно?

...