为什么子包不能看到包私有类?

时间:2010-03-21 22:54:53

标签: java inheritance packages organization

好的,我有这个项目结构:

包A.B

  • class SuperClass(此类标记为包私有)

包A.B.C

  • class SubClass(继承自超类)

我宁愿不让SuperClass公开显示......它实际上只是这个特定项目的实用程序类(A.B)。

在我看来,SubClass应该能够看到SuperClass,因为包A.B.C是A.B的子包......但事实并非如此。

解决此问题的最佳方法是什么?我认为将A.B.C中的所有内容移至A.B或将A.B移至A.B.C是不合理的...主要是因为可能会有A.B.D继承A.B.中的内容......

我对Java有点新,所以要好看:D(我是C ++和.NET人)

3 个答案:

答案 0 :(得分:9)

包是唯一标识符。你不能让他们遵循继承规则。 Package和SubPackage与Super和Sub类不相似。

我没有看到使你想在子包中使用的类对外界可见的任何缺陷。我很想知道如何在C ++ / .net中处理这个标准(因为我是一个java人:))

答案 1 :(得分:6)

最好的办法是将SuperClass的(默认)构造函数声明为protected。这样,只有相同的包和子类中的类,无论包是什么,都可以实例化它并从中扩展。

答案 2 :(得分:-1)

为什么不将它们放在同一个包级别?

你能以某种方式使用构图而不是继承吗?在阅读Effective Java之后,我一直在努力做更多这方面的事情。不确定这是否可以满足您的需求,但可能值得考虑。

祝你好运。