java 權(quán)限修飾符共有4個(gè)
public protected default private
4個(gè)修飾符可以修飾類辨赐,方法芋齿,變量
public 在任何地方都可以訪問(wèn)。
protected 在本包,本類,本包子類籍琳,非本包子類可以訪問(wèn)。
default 本包可以訪問(wèn)贷祈。
private 只能在本類中訪問(wèn)趋急。
比較特殊的一點(diǎn)是 protected 修飾
p.a
Anim.java
protected int num;
default int age;
//////////////////////////////
p.b
Cat extends Anim java
////////////////////////////////
p.c
使用protected修飾num變量說(shuō)明在p.b包中 Cat對(duì)象是可以訪問(wèn)num的,是不能訪問(wèn)age變量的势誊,那Cat對(duì)象在p.a包中是不是就可以訪問(wèn)age 變量呢呜达?是不可以訪問(wèn)的。
那在p.c包中键科,Cat對(duì)象還能訪問(wèn)到num變量么闻丑?也是不能的漩怎。
所以用protected修飾的話勋颖,子類對(duì)protected修飾的訪問(wèn)權(quán)限只能在子類中有訪問(wèn)權(quán)限。
protected比default只是多了一個(gè)子類訪問(wèn)權(quán)限勋锤。
個(gè)人覺(jué)得比較容易混淆的是protected饭玲。
分兩種情況說(shuō)明一下:
(1)子類父類同包
protected 和 沒(méi)有修飾符作用是相同的,父類和子類在同包任何地方都可以訪問(wèn)兩者修飾的成員變量或者方法叁执,在其他包是訪問(wèn)不了的茄厘。
(2)子類父類不同包
首先子類在任何地方都不能訪問(wèn)到default 修飾的變量或者方法矮冬,就算子類對(duì)象在父類中使用時(shí)也是不能訪問(wèn)的,用protected 修飾只給非同包子類下放了一個(gè)權(quán)限次哈,即只能在子類中訪問(wèn)該變量或者方法胎署。
個(gè)人覺(jué)得 protected 主要是用來(lái)管理非同包子類的訪問(wèn)權(quán)限的。
如果子類父類在同一個(gè)包窑滞,沒(méi)有必要用protected修飾琼牧,用default就可以了,子類父類不同包就發(fā)揮它的作用了哀卫。protected修飾的只能允許在子類中訪問(wèn)巨坊,其他任何地方子類都訪問(wèn)不到。