2012-01-13 31 views
7

Tôi có kịch bản phân cấp lớp sau; Lớp A có một phương thức và lớp B mở rộng lớp A, nơi tôi muốn gọi một phương thức từ lớp siêu từ một lớp lồng nhau cục bộ. Tôi hy vọng một hình ảnh cấu trúc xương kịch bản rõ ràng hơn Liệu Java có cho phép các cuộc gọi như vậy không?Các lớp lồng ghép Java địa phương và truy cập các phương thức siêu

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

Bạn có chắc chắn muốn gọi các triển khai phương pháp ghi đè của lớp bên ngoài từ lớp bên trong không? Có vẻ như một mớ hỗn độn đúng với tôi. –

+0

@Tom Hawtin - Tôi tin rằng đây đúng là một lớp "ẩn danh địa phương" không phải là một lớp "bên trong" - điều khiến nó trở nên rối rắm hơn nhiều. – emory

+0

@emory Về mặt kỹ thuật, các lớp bên trong vô danh là các lớp địa phương là các lớp bên trong. –

Trả lời

21

Bạn chỉ có thể sử dụng B.super.getCount() gọi A.getCount() trong call().

5

Bạn đã sử dụng B.super.getCount()

4

cái gì đó dọc theo dòng của

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

lẽ?

Các vấn đề liên quan