2013-06-19 37 views
12

Tôi có lớp bên trong trong mã của mình. Tôi muốn cấp quyền truy cập công khai cho các trường hợp của nó, nhưng chỉ có lớp bên ngoài mới có thể tạo các cá thể này, như trong truy cập "riêng tư". Là nó có thể mà không làm cho gói nhỏ đúng (hoặc tạo ra giao diện công cộng cho mỗi lớp bên trong như vậy)?Java - Trình tạo lớp bên trong - chỉ được phép cho lớp bên ngoài

(Xin lỗi nếu tiếng anh của tôi là xấu: P)

Trả lời

23

Có thể. Khai báo lớp bên trong của bạn công khai, nhưng hàm tạo của nó là riêng. Bằng cách này bạn có thể tạo ra nó chỉ bên trong lớp bao quanh của bạn và chính nó, nhưng không phải từ bên ngoài.

+1

Lớp ngoài thực sự có quyền truy cập vào trường riêng của lớp bên trong? Tốt để biết nếu nó hoạt động, cảm ơn! –

+0

Vì vậy, giải pháp này là sai? –

+1

Không, giải pháp này là đúng, lớp bên ngoài có thể thấy tất cả các trường, phương thức và các hàm tạo riêng của các lớp bên trong. – WilQu

1

Theo mặc định, Nếu bạn muốn để có được những thể hiện của các lớp bên trong bạn cần phải có lớp Outer đầu tiên.

A inner class là thành viên của lớp kèm theo.

Bạn không cần phải làm gì cho điều đó.

Non-static lớp lồng nhau (lớp bên trong) được tiếp cận với các thành viên khác của lớp kèm theo, ngay cả khi họ được khai báo là private

Tôi hy vọng tôi hiểu câu hỏi của bạn đúng cách.

Vui lòng refer.

+0

Constructor nên có sẵn chỉ dành cho các lớp bên ngoài (vì vậy không thể được công khai), nhưng chúng ta có thể sử dụng điều này đối tượng ra ngoài (vì vậy lớp không thể là riêng tư). –

0

Vì vậy, hãy tạo private lớp bên trong.

public class Outer { 
    private class Inner {} 
     public String foo() { 
      return new Inner().toString(); 
     } 
} 

bạn không thể hợp pháp gọi constructor mặc định riêng vì nó là tin

+0

Khi bên trong là riêng tư, tôi không thể sử dụng điều này ra ngoài. Tôi có thể làm cho giao diện công cộng cụ thể cho lớp này, nhưng tôi muốn tránh giải pháp này, nếu giải pháp tốt hơn tồn tại. –

+0

Đó là giải pháp cho câu hỏi này của bạn 'lớp bên ngoài chỉ có thể tạo ra trường hợp này'. bạn có thể xây dựng câu hỏi của bạn những gì bạn thực sự muốn !! nó không rõ ràng. – iMBMT

+0

Chỉ đối tượng 'Outer' mới có quyền truy cập để xây dựng các thể hiện của' Inner'. Bây giờ đã rõ chưa? Lấy làm tiếc :) –

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