Java访问修饰符

  private、protected、public是Java中的访问权限修饰符,可以用于修饰变量、方法和类。

 (更正:类只有default和public两种修饰符,内部类相当于成员,可以使用private、protected和public修饰

  private表示只能在本类才能访问;

  protected表示在同一个包的类中或者子类中可以访问;

  public表示在任何类中都可以访问;

  当不用这三个修饰符修饰时就是默认的访问权限,即在同一个包的类中可以访问。

  

  Java的访问权限是基于类的,而不是基于对象的:

 class  Parent
 {
     private  String name;
     protected String sex;
     public int age;
    
     public Parent()
     {
         name = "parent";
     }
 
     public void method1()
     {
        name = "Jack"; 
        Parent wife = new Parent();
        wife.name = "Lily";      // 可以访问wife的private属性name
     }
  
 }
 
 public class  Child   extends  Parent
 {
    
 }
 
 public  class  Test                             //Test类和Parent类、Child类不在一个包中
 {
    public static void main(String[] args)
     {
         Child  child = new Child();
         child.sex = "boy";        //不能访问child的属性sex,因为在Test类中,而Test类不是Parent类的子类(这句注释不准确)
         child.age =  3;    //可以在任何类中访问age属性
     }
}

  上面的例子中有个错误,即使Test类继承自Parent类,child对象也无法访问sex属性。原因是,与父类不在同一个包中的子类只能访问自身从父类中继承来的protected属性,而不能访问父类实例以及父类的其他子类的实例的protected属性。

    与此类似的问题是,在其他类中不能访问Object类的protected的clone方法,尽管Object类是所有类的超类。

      关于protected的这个问题参考自以下博文:http://blog.csdn.net/ciawow/article/details/8262609

参考资料 《Java核心技术》

原文地址:https://www.cnblogs.com/jqctop1/p/4664882.html