在Java中提供了四種訪問權(quán)限,使用不同的訪問權(quán)限時,被修飾的內(nèi)容會有不同的訪問權(quán)限,以下表來說明不同權(quán)限的訪問能力:
???????????????????????????????????????? public???? ?? protected???????? 空的(default) ? ? ? private
同一類中????????????????????????????? √????????????????? √??????????????????????? √?????????????????????? √
同一包中(子類與無關(guān)類)????? √????????????????? √???????????????????????? √
不同包的子類?????????????????????? √????????????????? √
不同包中的無關(guān)類??????????????? √
歸納一下:在日常開發(fā)過程中,編寫的類、方法、成員變量的訪問
?????? 要想僅能在本類中訪問使用private修飾;
?????? 要想本包中的類都可以訪問不加修飾符即可;
?????? 要想本包中的類與其他包中的子類可以訪問使用protected修飾
?????? 要想所有包中的所有類都可以訪問使用public修飾。
這里要注意的是,如果類用public修飾,則類名必須與文件名相同。一個文件中只能有一個public修飾的類。
這里著重說說受保護權(quán)限pretected.有人說它的用法是:受保護,給子類用
下面代碼說明問題:
package com.fenxiang.protecteddemo;
???? public classFu {
??????????? protected void pro(){
?????????????????? System.out.println("受保護權(quán)限的方法");
???????????? }
???? }
package com.fenxiang.protecteddemo;
public class Zi extends Fu{
}
package com.fenxiang.demo;
import com.fenxiang.protecteddemo.Zi;
public classDemo {
???? public static void main(String[]args) {
????????????? Zi z = new Zi();
????????????? z.pro(); //無法調(diào)用Pro方法
????? }
}
但是在這里測試類Demo中無法調(diào)用Pro方法,所以理解為”給子類用”是有問題的
下面修改后代碼:
package com.fenxiang.protecteddemo;
public class Fu {
?????? protected void pro(){
????????????? System.out.println("受保護權(quán)限的方法");
?????? }
}
package com.fenxiang.protecteddemo;
public class Zi extends Fu{
?????? public void show(){?? //加入show方法,在show方法中調(diào)用pro方法
????????????? pro();
?????? }
}
package com.fenxiang.demo;
import com.fenxiang.protecteddemo.Zi;
public class Demo {
?????? public static void main(String[]args) {
?????????????? Zi z = new Zi();
?????????????? z.show();???? //調(diào)用子類中的show方法
??????? }
}
修改后編譯成功,程序正常運行,輸出:受保護權(quán)限的方法
所以得到結(jié)論:
受保護權(quán)限用法:只能在子類中去使用,出去子類,不能使用