2012-06-23 145 views
2

我正在尝试使用不同访问修饰符的类的包进行项目,以查看具有不同访问修饰符的类的所有特性。我尝试了一个包含公共类的包,其中一个包含一个默认类,然后尝试另外两个包含受保护和私有类,但它表示“类privatez的非法修饰符;只允许public,摘要& final”。这是为什么。其次,测试每个班级的东西是理解它的好方法。我试图给出比以前的帖子更好的问题。我也想学习每个访问修饰符的应用。练习访问修饰符

+0

可能重复(http://stackoverflow.com/questions/11165566/practice-access-modifiers) –

+1

@AnthonyPegram我把它做成一个更好的问题,实际上解释了我想知道。这不是重复。 –

回答

5

我想有一个包,一个公共类,一个带有默认类,然后设法让其他受保护和私有类2,但它说:“作为类privatez非法修改;只有公开,抽象&决赛被允许“为他们。这是为什么。

简单的答案是,JLS说你不能声明顶级类为private

原因是,只有一个只有自己可见的类是没有意义的。没有任何其他课程能够使用它(除了假设,使用反射技巧)。所以JLS只是说:“没有道理,我不允许。”

(现在嵌套可以访问private ...那是因为private意味着private在最外层的类所有类...)

其次,是测试每个班级的东西都是理解它的好方法。

我认为最好是阅读并尝试理解课本/教程。问题是,如果你试图通过自己的例子来学习,你很容易从中得出错误的结论。


对于这个例子:

package privatez; protected class privatez { } 

一个假设protected类会/可能仅是它的子类可见。但类别总是对其子类可见,所以这没有任何意义。 (另外,为了防止子类的方法是声明一个类final,你可以使用“包私人”限制的子类,即没有访问修饰符)

protected访问修饰符只让任何意义的东西一类。在顶级课程中,protected的正常含义没有任何意义。 (这是试图通过例子学习的问题之一,你最终难以理解为什么编译器会拒绝这些例子,不要指望编译器“解释”出错的原因,这不是它的角色)

+1

,但是受保护的类可以在同一个包之外的子类中可见,所以不会让它值得受保护 –

+0

我需要查看您编写/编译的确切代码以回答该问题。和确切的编译错误消息。 –

+0

+1如果存在受保护的类概念,那么该类对于相同包中的子类将是可见的,并且在没有定义任何修饰符的情况下就是这种情况。 – havexz

3

如果你想学习,你应该阅读一些关于java的书。在这里,我只能给你一个小要点:

类访问修饰符:

公共

类可以包装它的一部分外部访问。

默认

这是当你不指定任何东西。这个类可以在包中使用,它是其中的一部分。

只是为了澄清:

private改性剂是没有意义的。由于没有人可以访问私有类,所以不能用于扩展或实例创建。

说一下,如果有一个protected类的概念,那么这个类对于同一个包中的子类是可见的,如果你没有定义任何修饰符的话,这个类是可见的。

其他类属性(这些都没有访问改性剂):

抽象

如果定义,该类的用户不能创建它的实例。而扩展它的类必须实现抽象方法或将其定义为抽象。

最终

如果定义,用户不能扩展此类。

For more details about java as language read

[做法访问修饰符]的