Java Class Accessibility

Slightly related to my other question: What is the difference between the following:

private class Joe
protected class Joe
public class Joe
class Joe

Once again, the difference between the last 2 is what I'm most interested in.


A public class is accessible to a class in any package.

A class with default access ( class Joe ) is only visible to other classes in the same package.

The private and protected modifiers can only be applied to inner classes.

A private class is only visible to its enclosing class, and other inner classes in the same enclosing class.

A protected class is visible to other classes in the same package, and to classes that extend the enclosing class.


  • private: visible for outer classes only
  • protected: visible for outer classes only
  • public: visible for all other classes
  • class: package-private, so visible for classes within the same package
  • See JLS for more info.


    A class with default access has no modifier preceding it in the declaration.

    The default access is a package-level access, because a class with default access can be seen only by classes within the same package.

    If a class has default access, a class in another package won't be able to create a instance of that class, or even declare a variable or return type . The compiler will complain. For example:

    package humanity;
    class Person {}
    
    package family;
    import humanity.Person;
    class Child extends Person {}
    

    Try to compile this 2 sources. As you can see, they are in different packages, and the compilation will fail.

    链接地址: http://www.djcxy.com/p/4112.html

    上一篇: 包内的方法可访问性

    下一篇: Java类可访问性