在面向对象程序设计中,对象的行为被定义为方法,而对象的特征被定义为属性。类是对象的模板,描述了一类对象的属性和方法。在类中定义的属性和方法被称为类成员。类成员的访问权限决定了该成员可以在何处访问。Java语言中,类成员的访问权限包括public、private、protected和default四种。
1. public
public是最大限度地公开访问权限,所有的类都可以访问public成员。一个类和public成员之间没有访问限制。例如:
```
public class Person {
public String name;
public void sayHello() {
System.out.println("Hello, " + name + " !");
}
}
```
在上述代码中,name和sayHello()方法是public的,可以被任何一个类访问。
2. private
private是最小限度的访问权限,只有定义该成员的类才可以访问private成员。它不能被同一个包中的其它类访问,更不能被不同包中的类访问。例如:
```
public class Person {
private String name;
private void sayHello() {
System.out.println("Hello, " + name + " !");
}
}
```
在上述代码中,name和sayHello()方法是private的,只能被Person类中的其他部分访问,不能被其他任何类或对象访问。
3. protected
protected访问权限允许访问类本身、所处包中的任意类以及该类的子类中。因此,它比private具有更大的访问权限。例如:
```
public class Person {
protected String name;
protected void sayHello() {
System.out.println("Hello, " + name + " !");
}
}
public class Student extends Person {
public void study() {
System.out.println(name + " is studying !");
}
}
```
在上述代码中,Person类的name和sayHello()方法是protected的,可以被二者以上的包中的类访问。于是,在Student类中的study()方法里访问了Person类的name属性。
4. default
default访问权限不用任何关键字修饰,例如:
```
public class Person {
String name;
void sayHello() {
System.out.println("Hello, " + name + " !");
}
}
```
在上述代码中,如果没有指定访问权限,默认权限即为包访问权限。这意味着只有该类的同一个包中的其他类可以访问默认访问权限成员。例如,在Person类的同一个包下的Test类中,可以这样使用Person类默认权限下的name属性:
```
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.name = "Tom";
p.sayHello();
}
}
```
5. 总结
访问权限是控制类和类成员之间可见性的机制。Java中类成员的访问权限包括public、private、protected和default这四种。其中,public是最大限度公开访问权限,private是最小限度的访问权限,protected是介于public和private中间的访问权限,而default访问权限作为默认访问权限,只能被这个类及其同一包内的其他类访问。
扫码咨询 领取资料