java中public、private、protected的区别
在java中通过三个关键字public、private、protected在类的内部来进行边界的设定,这些访问指定词(access specifier)决定了紧跟其后被定义的东西可以被谁访问。
- public:表示紧跟其后的成员可以被任何人引用
- private:表示紧跟其后的成员除了类型创建者和类型内部的方法,任何人都不可引用,否者程序编译报错
- protected:protected关键字与private效果相当,差别仅在于继承的类可以访问protected成员
- 默认访问权限(即定义属性时不加任何关键字修饰):默认访问权限通常被称为“包访问权限”,在这种权限下的成员变量可被同一个包中的其他类访问
具体如下:
我们首先按照如下方式创建三个类:Person、Teacher、Animal,其中Person与Teacher类在同一个包person中,Animal类在另一个包animal中
package person;
public class Person {
public int age;
String name;
protected String address;
private String gender;
}
package person;
public class Teacher extends Person {
public void setInfo() {
Person per = new Person();
per.age = 12;//public修饰成员可被任何人访问
per.name = "Bob";//同一个包中的类可访问默认权限成员
per.address = "UK";//继承的类可访问protected成员
per.gender = "man";//ERROR 继承的类无法访问private成员
}
}
package animal;
import person.Person;
public class Animal {
public void setInfo() {
Person per = new Person();
per.age = 12;//public修饰成员可被任何人访问
per.name = "Bob";//ERROR 包访问权限成员无法被其他包中的类访问
per.address = "UK";//ERROR protected成员无法被其他包中的类访问
per.gender = "man";//ERROR private成员只能被类型创建者及类型内部方法访问
}