访问控制
Java为保护类及成员的安全,提供了公有(public)、保护(protected)、私有(private)、缺省多级访问控制权限,用于声明该类或成员能被其他哪些类访问,实现信息分级隐藏技术。
1、类的访问控制权限
类有两种访问控制权限:公有和缺省。
公有权限使用public修饰符,可被所有包中的其他类访问;
缺省权限没有修饰符,仅能被当前包(当前文件夹)中的其他类访问。
注:一个源程序文件中可以声明多个类,但用public修饰的类只能有一个,且该类名必须与文件名相同。
例:Student_ex.java此文件夹中有两个类。其中main方法在类Student_ex中,故此文件夹以此类名命名。
Person类为缺省权限,但它与Student_ex在同一个文件中,故是可以访问的。
class Person{
private String name;
public Person(){
name="123";
}
public Person(String name){
this.set(name);
}
public void set(String name){
this.name=name;
}
public void getName(){
System.out.println(name);
}
}
public class Student_ex{
public static void main(String args[]){
Personp=newPerson();
p.getName();
p.set("张熹熹");
p.getName();
}
2、类中成员的访问控制权限
一个类的所有成员都可被本类的代码访问。
但对其他类,可以有选择地对其可见或不可见。
类的成员有4种访问控制权限:
(1)private声明私有成员,该成员仅能被当前类的成员访问,这是类希望隐藏的部分。很多情况下,成员变量均声明为私有。
(2)缺省:说明该成员能被当前类以及当前包中的其他类访问。
(3)protected声明保护成员:该成员能被当前类及其子类、当前包中的其他类访问。
(4)public声明公有成员,该成员能被所有类访问。
例:
package learn;
class Date{//缺省,只能被当前文件或当前包中访问
private intyear,month,day;//私有变量,只能被当前类访问
public Date(int year,int month,int day){
this.set(year, month, day);
}
public void set(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
public Date(){
year=2000;
month=1;
day=1;
}
public void getYear(){//公有方法,可以被其他类访问
System.out.println(year);//本类可以访问所在成员
}
}
public class MyDate {
publicstaticvoid main(String args[]){
Dated=newDate();
//d.year=5;
//出钷啦。year为私有成员,不能被其他类访问
d.getYear();//可以访问public类型的方法
}
}