2012-02-26 40 views
12

Trong java, nói rằng tôi có lớp sau:lớp bên trong mở rộng

public class A{ 
    protected class B{ 
    } 
} 

tôi có thể mở rộng các lớp bên trong bằng cách làm như sau?

public class C extends A{ 
    protected class D extends B{ 
    } 
} 

Những gì tôi muốn làm là tôi có lớp C ở trên và tôi cần phải thay đổi điều gì đó trong lớp bên trong của một vì vậy tôi đã suy nghĩ rằng tôi cần phải mở rộng các lớp bên trong để làm như vậy nhưng tôi đã không chắc chắn làm thế nào chính xác để làm điều đó.

+2

Bạn đã thử biên dịch chưa? –

+0

Có, bạn có thể mở rộng lớp bên trong như thế. – Headshota

+1

Nó biên dịch .... – eboix

Trả lời

7

Theo this page, bạn đã tìm đúng cách để mở rộng các lớp bên trong. Một vài lời khuyên về nó có thể được tìm thấy here, ở giữa bài viết (tìm kiếm cho "mở rộng").

1

Nếu điều đó không làm việc (tôi không nghĩ rằng nó sẽ), sau đây nên:

public class C extends A{ 
    protected class D extends A.B{ 
    } 
} 

Vâng, nó sẽ, nhưng những gì nếu bạn đã một lớp khác có tên B ngoài A?

Chỉnh sửa: không, nó không có sự khác biệt. Ngay cả khi có một lớp khác có tên là B, nó vẫn sẽ mất A.B. Vì vậy, cú pháp của bạn là chính xác.

+0

giải pháp của user1082160. Tôi cũng ngạc nhiên. – eboix

+1

Nó sẽ không hoạt động nếu 'D' là' tĩnh', nhưng nó không phải, do đó, nó không. – Jeffrey

1

Bạn được phép làm điều đó nhưng không mong đợi lớp C của bạn sử dụng lớp D thay vì tự động lớp B bên trong A.

+0

Đây là khía cạnh thực sự quan trọng với kế thừa cấu trúc dữ liệu lớp bên ngoài/bên trong. Có bất kỳ mô hình được biết đến để đối phó với vấn đề này (generics vv)? – sema

+0

Tôi muốn nói tiêm thực tế của B (B hoặc D trong trường hợp này) bạn muốn sử dụng. – stryba

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