访问级别修饰符决定其他类是否可以访问该类的某个字段或某个方法。
有两种访问控制种类;
1.top level(针对类的修饰)
包括public和package-private(不明确指定修饰符,什么都不写,即默认情况)两种修饰符;
2.member level(针对成员的修饰)
包括public,private,protect,package-private四种修饰符。
对于类的访问控制,public表示被修饰的类对任何地方的类都可见。如果不写访问修饰符,即package-private情况,被修饰类只对该类所属包的类可见。
对于成员的访问控制,public和package-private的定义和类的访问控制完全一样,成员新增了两个访问修饰符分别是private和protect,private表示该成员只能被所属的类访问,protect包括了package-private的可见性,多出了对该类子类的可见性,子类可以在该类的同一个包,也可以在其他包。
java的访问控制看上去还是很简单,但有一点我觉得有点迷惑,就是如果一个类的访问修饰符为package-private(不明确指定修饰符),那么该类的成员比如一个方法的修饰符定义为public有什么意义?因为该类在别的包都不能访问了,那该类的方法肯定也就无法调用了。但是这样定义程序并不报错,因此肯定有其存在的道理。在网上搜索了一下类似的疑问,发现了一个很好例子可以解释这个疑问。

代码
package test;
public abstract class test {
public abstract void test();
public static test getinstance(){
return new subtest();
}
}
class subtest extends test{
@override
public void test() {
system.out.println("subtest's test()");
}
}
测试用代码:
import test.test;
public class main {
public static void main(string[] args) {
test t = test.getinstance();
t.test();
}
}
这是现在我知道的唯一一种可以让package-private修饰的类的public或protect方法可以被其他包访问的方法,我想这样写是因为可以间接实现让一个子类重写的方法的访问级别较父类的方法降低,因为重写方法降低访问级别是不允许的。这样假设继承或实现了一个public方法,但是可以让其他包无法得知他的方法,除非通过其父类来访问。算是增加了访问控制的灵活性。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
519

被折叠的 条评论
为什么被折叠?



