2010-03-21 24 views
7

Được rồi vì vậy, tôi có cấu trúc dự án này:Tại sao các gói phụ không thể xem các gói riêng tư?

gói AB

  • lớp SuperClass (lớp này được đánh dấu gói tin)

gói ABC

  • lớp SubClass (kế thừa từ siêu lớp)

Tôi không muốn làm cho SuperClass hiển thị công khai ... Nó thực sự chỉ là một lớp tiện ích cho dự án cụ thể này (A.B).

Dường như với tôi rằng SubClass sẽ có thể xem SuperClass, bởi vì gói A.B.C là một gói con của A.B ... nhưng đây không phải là trường hợp.

Cách tốt nhất để giải quyết vấn đề này là gì? Tôi không nghĩ rằng nó làm cho tinh thần để di chuyển tất cả mọi thứ trong ABC lên đến AB hoặc di chuyển AB xuống ABC .. chủ yếu là vì có lẽ sẽ có một ABD mà thừa hưởng từ các công cụ trong AB là tốt ...

Tôi một chút mới cho Java, do đó, được tốt đẹp: D (Tôi là một C + + và. NET guy)

Trả lời

9

Các gói là mã định danh duy nhất. Bạn không thể làm cho họ tuân theo các quy tắc thừa kế. Gói và SubPackages không giống với các lớp Super và Sub.

Tôi không thấy bất kỳ sai sót nào khi tạo lớp mà bạn muốn sử dụng trong gói phụ để hiển thị với thế giới bên ngoài. Tôi sẽ được quan tâm để biết làm thế nào tiêu chí này được xử lý trong C++ /. Net (như tôi là một java guy :))

+0

Vâng, tôi nghĩ rằng tôi chỉ là các gói hiểu lầm – Polaris878

+2

Trong .NET tôi đã đặt các lớp trong các thư mục và đánh dấu chúng bên trong :) – Polaris878

+0

@ Polaris878: Tốt. – bragboy

6

Đặt cược tốt nhất của bạn là khai báo (mặc định) constructor (s) của SuperClassprotected. Bằng cách này chỉ các lớp trong cùng một gói và các lớp con bất kể gói có thể khởi tạo nó và mở rộng từ nó ra sao.

-1

Tại sao không đặt chúng ở cùng một mức gói?

Bạn bằng cách nào đó có thể sử dụng bố cục thay vì thừa kế không? Tôi đã cố gắng tự mình làm nhiều hơn sau khi đọc Java hiệu quả. Không chắc chắn nếu điều này là có thể cho nhu cầu của bạn, nhưng nó có thể là giá trị xem xét.

Chúc may mắn.

+1

Tôi không muốn họ ở cùng một cấp độ gói bởi vì tôi sẽ có khoảng 20-30 lớp học sẽ dựa vào lớp học siêu, và tôi đang cố gắng giữ mọi thứ có tổ chức lol. – Polaris878

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