公共类需要公共成员(访问成员时)?

时间:2014-06-26 03:59:35

标签: java class public members

我在Java书中,在关于包和私有修饰符的部分中注意到,代码在类上冗余使用private,并且在包外部访问类的成员。

package bookpack;

public class Book {
    private String title;
    private String author;
    private int pubDate;

    public Book(String t, String a, int d) {
        title = t;
        author = a;
        pubDate = d;
    }

    public void show() {
        System.out.println(title);
        System.out.println(author);
        System.out.println(pubDate + "\n"); 
    }
}

当我从public中删除show()时,Eclipse会给出一个错误,指出无法访问该成员(尝试从另一个包中执行此操作时)。我理解这是因为它不是public因此无法从包外部访问。但是,由于该类是公开的,我认为除非另有说明,否则该类的所有成员都将为public。这将遵循这里的"一般规范,后面的具体规范"风格,类似于继承。就像你不能从静态方法调用动态对象一样。那么为什么公共类成员需要public标记呢? public标记如何在检索类的公共成员

的上下文中影响可访问性

2 个答案:

答案 0 :(得分:2)

从评论部分扩展

访问修饰符仅适用于他们直接修改的内容。因此,类上的public仅影响类的可见性 - 其任何成员的可见性。因此,您可以为包私有类提供public成员,如果您希望隐藏在公共API中的抽象类,这可能很有用。

此外,缺少可见性修饰符已经定义为包私有可见性。因此,它不能用于表示"与class"相同。至于为什么语言就是这样设计的,我能想到的最好的结果是它可能看起来在限制外部世界的可见性与允许不同的顶级类之间的良好平衡交互。

答案 1 :(得分:0)

正如评论中指出的

  

访问级别修饰符确定其他类是否可以使用   特定字段或调用特定方法。有两个级别   访问控制:

     
      
  • 在顶层 - public或package-private(无显式修饰符)。
  •   
  • 在成员级别 - public,private,protected或package-private(无显式修饰符)。
  •   
     

可以使用修饰符public声明一个类,在这种情况下   所有类都可以看到类。如果一个类没有修饰符   (默认值,也称为package-private),它只是可见的   在自己的包中(包被命名为相关类的组 -   你将在后面的课程中了解它们。)

     

在会员级别,您也可以使用公共修饰符或否   修饰符(package-private)与顶级类一样,并且与   同样的意思。对于会员,还有两个额外的访问权限   修饰符:私有和受保护。 private修饰符指定了   该成员只能在自己的类中访问。受保护的   修饰符指定只能在自己的成员中访问该成员   package(与package-private一样),另外还有一个子类   它在另一个包中的类。

有关详细信息,请仔细阅读link