2012-08-27 50 views
6

tôi đã nhận một lớp và một lớp conbên trong truy cập lớp phương pháp lớp bên ngoài, cùng một phương pháp tên

01 public class A{ 
02 void test(){}; 
03 public class B{ 
04  void test(){ 
05  test(); 
06  } 
07 } 
08 } 

Ok, phù hợp 05 id thích để truy cập thử nghiệm phương pháp của lớp A. Nhưng tôi đi vào một vòng lặp vì tôi không biết cách chỉ định sử dụng phương thức của lớp A.

Bất kỳ ý tưởng nào?

+2

Đó không phải là lớp phụ. Nếu bạn thực sự muốn có cấu trúc này, 'A.this.test()' sẽ hoạt động. – Thilo

+0

@Thilo Bạn nói đúng, đó là một lớp bên trong. xin lỗi 4 rằng –

Trả lời

13
01 public class A{ 
02 void test(){}; 
03 public class B{ 
04  void test(){ 
05  test(); // local B.test() method, so recursion, use A.this.test(); 
06  } 
07 } 
08 } 

CHỈNH SỬA: Như @Thilo tôi ntioned: Tránh sử dụng cùng một tên phương thức trong lớp bên ngoài và lớp bên trong, điều này sẽ tránh xung đột đặt tên.

+3

+1. Một giải pháp tốt hơn có thể là chỉ thay đổi tên phương thức thành không xung đột. – Thilo

+0

Nói chung bạn có quyền tránh cùng một tên phương thức, nhưng trường hợp của tôi là mẫu Freemarker Hibernate cho các lớp đại biểu generarte chỉ từ các cá thể hiện có. –

+0

Tôi đã thử điều này trên mã của riêng tôi và tôi nhận được 'biến không tĩnh này không thể được tham chiếu từ một bối cảnh tĩnh'. Và khi tôi thả A để nó trở thành this.test() (và tôi một cái gì đó từ kiểm tra) tôi nhận được 'không thể tìm thấy biểu tượng'. Có phải vì tôi có một giá trị trả về gây ra lỗi và nếu vậy thì làm cách nào để trả về một giá trị cho một hàm bên trong từ một hàm bên ngoài – NSaid

0

Class B không phải là một cái gọi là lồng lớp để mở rộng Class A chỉ viết

public class B extends A { 
... 

} 

hơn bạn có thể gọi của một thử nghiệm() như

super.test() 

Nếu bạn gọi kiểm tra() giống như bạn làm điều đó mà chúng tôi gọi là đệ quy và sẽ đóng băng cho đến Ngày Phán quyết

0

Nếu bạn làm cho nó tĩnh bạn có thể gọi

A.test() 

khác bạn cần một thể hiện của A để sử dụng trong B

A a; 
a.test(); 
5

Bạn có thể làm một cái gì đó như thế:

public class A{ 
    void test(){ 
     System.out.println("Test from A"); 
    }; 
    public class B{ 
     void test(){ 
      System.out.println("Test from B"); 
      A.this.test(); 
     } 
    } 

    public static void main(String[] args) { 
      A a = new A(); 
      B b = a.new B(); 
      b.test(); 
    } 
} 

Sau đó, bạn có kết quả sau:

Test from B 
Test from A 
Các vấn đề liên quan