2010-03-21 3 views
7

그래 그래서, 나는이 프로젝트 구조가 있습니다하위 패키지가 패키지 개인 클래스를 볼 수없는 이유는 무엇입니까?

패키지 AB를

  • 클래스 SuperClass

패키지 ABC (이 클래스는 개인 패키지 표시됩니다)

  • 클래스 SubClass (수퍼 클래스에서 상속)

나는 SuperClass을 공개적으로 보이게하지 않으려 고합니다 ...이 프로젝트 (A.B)의 유틸리티 클래스 일뿐입니다.

패키지 A.B.C가 A.B의 하위 패키지이기 때문에 SubClass가 SuperClass을 볼 수 있어야합니다.하지만 그렇지 않습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 나는 ABC의 모든 것을 AB로 옮기거나 AB를 ABC로 옮기는 것이 이치에 맞지 않는다고 생각합니다. AB에서 물건들로부터 상속받은 ABD가 있기 때문에 주로 ...

저는 Java에 조금 익숙해졌습니다. D (저는 C++ 및 .NET 사용자입니다)

답변

9

패키지는 고유 한 식별자입니다. 상속 규칙을 따르도록 만들 수는 없습니다. Package와 SubPackages는 Super와 Sub 클래스와 유사하지 않습니다.

하위 패키지에서 사용하고 싶은 클래스를 바깥 세상에서 볼 수 있도록하는 데있어 결함이 보이지 않습니다. 이 기준이 C++/.net에서 어떻게 다루어 지는지 알고 싶습니다. (자바 사람이므로 :)

+0

그래, 내가 방금 패키지를 오해 한 것 같아서. – Polaris878

+2

. NET에서 나는 클래스에 폴더를 넣고 내부에 표시했다. :) – Polaris878

+0

@ Polaris878 : Nice. – bragboy

6

(기본) 생성자를 SuperClass으로 선언하는 것이 가장 좋은 방법은 protected으로 선언하는 것입니다. 이 방법은 동일한 패키지와 패키지에 관계없이 하위 클래스 만 클래스를 인스턴스화하고 확장 할 수 있습니다.

-1

왜 같은 패키지 레벨에 넣지 않으시겠습니까?

어떻게 든 상속 대신 컴포지션을 사용할 수 있습니까? 나는 Effective Java를 읽은 후에 더 많은 것을 시도하고있다. 귀하의 필요에 따라 이것이 가능한지 확실하지 않지만 고려해 볼 가치가 있습니다.

행운을 빈다.

+1

수퍼 클래스에 의존하는 약 20-30 개의 클래스가있을 것이기 때문에 같은 패키지 레벨에서 그들을 원하지 않습니다. 그리고 저는 물건을 롤 상태로 유지하려고 노력하고 있습니다. – Polaris878

관련 문제