private、protected、public是Java中的访问权限修饰符,可以用于修饰变量、方法和类。
(更正:类只有default和public两种修饰符,内部类相当于成员,可以使用private、protected和public修饰)
private表示只能在本类才能访问;
protected表示在同一个包的类中或者子类中可以访问;
public表示在任何类中都可以访问;
当不用这三个修饰符修饰时就是默认的访问权限,即在同一个包的类中可以访问。
Java的访问权限是基于类的,而不是基于对象的:
classParent
{privateString name;protectedString sex;public intage;publicParent()
{
name= "parent";
}public voidmethod1()
{
name= "Jack";
Parent wife= newParent();
wife.name= "Lily"; //可以访问wife的private属性name
}
}
publicclass Child extendsParent
{
}public classTest //Test类和Parent类、Child类不在一个包中
{public static voidmain(String[] args)
{
Child child= newChild();
child.sex= "boy"; //不能访问child的属性sex,因为在Test类中,而Test类不是Parent类的子类(这句注释不准确)
child.age = 3; //可以在任何类中访问age属性
}
}
上面的例子中有个错误,即使Test类继承自Parent类,child对象也无法访问sex属性。原因是,与父类不在同一个包中的子类只能访问自身从父类中继承来的protected属性,而不能访问父类实例以及父类的其他子类的实例的protected属性。
与此类似的问题是,在其他类中不能访问Object类的protected的clone方法,尽管Object类是所有类的超类。
参考资料 《Java核心技术》