2012-01-13 4 views
7

У меня есть следующий сценарий иерархии классов; Класс A имеет метод, а класс B расширяет класс A, где я хочу вызвать метод из суперкласса из локально вложенного класса. Надеюсь, что структура скелетной структуры более очевидна в сценарии Разрешает ли Java такие звонки?Явные локальные классы 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(){ 
    } 
} 
+1

Вы действительно уверены, что хотите вызвать переопределенные методы реализации внешнего класса из внутреннего класса? Кажется, это правильный беспорядок для меня. –

+0

@Tom Hawtin - Я считаю, что это правильно «локальный анонимный» класс, а не «внутренний» класс, что делает его гораздо более беспорядочным. – emory

+0

@emory Технически анонимные внутренние классы являются локальными классами - это внутренние классы. –

ответ

21

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

4

Что-то вдоль линий

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

возможно?