java提供了public,private,protected三个访问权限修饰词,提供了四种访问权限控制机制:
1. 包访问权限;
2. public访问权限;
3. private访问权限;
4. protected访问权限;
1,包访问权限
当方法域没有给定访问权限控制符,就默认具有该权限。具有包访问权限的方法和域成员,在包内是完全可见的,而包外则不可见。
package access;
public class Animal {
void bark(){
System.out.println("bark");
}
}
package access;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.bark();
}
}
因为上面两个类在同一个包下,而Animal类中的bark()方法为包访问权限,所以对Test类可见。对java文件中的类也是如此,若没有指定先支付,则默认是包访问权限,只能在包内被使用,包外是无法利用其创建对象的。
2,public 访问权限
在方法或者域前面给定public 限定符,就具有了public访问权限。
public权限是最宽松的一种权限,对包内外都是完全可见的,一个java文件内,可以有多个类,但是只能有一个被public修饰,且被修饰的类必须和文件名一致。
注意:类的访问权限只有包访问权限和public访问权限两种。
3,private 访问权限
private访问权限是最严格的一种权限。
当方法或者域被定义为private时,表明其只针对该类的内部可见,类的外部是不可见的(包括同一包内的其他类)。
package access;
public class Animal {
private void bark(){
System.out.println("bark");
}
}
package access;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.bark();//此处将造成编译错误,因为bark()方法为private,仅对Animal类内部可见。
}
}
4,protected 访问权限
protected权限是介于public 和 private之间的权限,具有该权限的方法和域只能对其自身和导出类可见(比如子类)。
在程序设计中,最常用的是public 和private 两种,一般情况将域定义为private,将方法定义为public 。外界使用该类的时候,可以访问该方法,但是具体域成员则对外屏蔽,只能通过类提供的接口访问。
5.总结
作用域 | 当前类 | 同一package | 子类 | 其他package |
public | yes | yes | yes | yes |
protected | yes | yes | yes | no |
default | yes | yes | no | no |
private | yes | no | no | no |