最近闯两,又復(fù)習(xí)了一下Java的訪問(wèn)修飾符,總結(jié)一下吧。
Java中有三種訪問(wèn)修飾符生蚁,分別是public、protected和private戏自,不帶任何修飾符則稱(chēng)之為default邦投。
Java的訪問(wèn)權(quán)限控制只存在于編譯階段,而編譯生成的字節(jié)碼文件事實(shí)上沒(méi)有留下任何痕跡擅笔,只是在編譯的時(shí)候進(jìn)行訪問(wèn)權(quán)限的檢查志衣。其實(shí),通過(guò)反射的手段猛们,可以訪問(wèn)任何包下任何類(lèi)的成員念脯,例如,訪問(wèn)類(lèi)的私有成員也是可能的弯淘。
一绿店、類(lèi)
類(lèi)不能被protected和private修飾,一個(gè)源文件中只能有一個(gè)public類(lèi)庐橙,并且該源文件名要和public類(lèi)名一致假勿,其他類(lèi)只能是default。
二态鳖、成員變量和成員方法
簡(jiǎn)單而言转培,private具有類(lèi)內(nèi)可見(jiàn)性,default具有包內(nèi)可見(jiàn)性浆竭,protected具有包內(nèi)和子類(lèi)可見(jiàn)性浸须,public具有包外可見(jiàn)性。
假設(shè)類(lèi)A有public邦泄、protected删窒、private和default修飾的成員變量和成員方法。
- 在類(lèi)A的成員方法中顺囊,可以直接訪問(wèn)和調(diào)用類(lèi)A中用public易稠、protected、private和default修飾的成員變量和成員方法包蓝。
- 在類(lèi)A的main方法中驶社,可以通過(guò)構(gòu)造類(lèi)A的對(duì)象訪問(wèn)和調(diào)用public、protected和default修飾的成員變量和成員方法测萎。
- 與類(lèi)A在同一個(gè)包中亡电,未繼承類(lèi)A的其他類(lèi)的成員方法或者main方法,與(2)一致硅瞧。
- 與類(lèi)A在同一個(gè)包中份乒,繼承類(lèi)A的子類(lèi),子類(lèi)的成員方法可以直接訪問(wèn)和調(diào)用父類(lèi)中用public、protected和default修飾的成員變量和成員方法或辖;子類(lèi)的main方法也是和(2)一樣的瘾英。
- 與類(lèi)A不在同一個(gè)包中,未繼承類(lèi)A的其他類(lèi)的成員方法或者main方法只能通過(guò)構(gòu)造類(lèi)A的對(duì)象訪問(wèn)public修飾的成員變量和成員方法颂暇。
- 與類(lèi)A不在同一個(gè)包中缺谴,繼承類(lèi)A的子類(lèi),它的成員方法可以直接訪問(wèn)和調(diào)用父類(lèi)中用public和protected修飾的成員變量和成員方法耳鸯;子類(lèi)的main方法同(5)湿蛔。
三、關(guān)于private的一些事
private修飾final方法沒(méi)有意義县爬,因?yàn)閒inal方法本身就不允許子類(lèi)覆蓋它阳啥,然而加上private后,這個(gè)方法對(duì)于子類(lèi)而言不具有可見(jiàn)性财喳,談何覆蓋察迟。
private修飾abstract方法是錯(cuò)誤的,abstract方法要求子類(lèi)實(shí)現(xiàn)它耳高,然而加上private后卷拘,這個(gè)方法對(duì)于子類(lèi)而言不具有可見(jiàn)性,談何實(shí)現(xiàn)(覆蓋)祝高。
轉(zhuǎn)載請(qǐng)注明如下內(nèi)容:
文章來(lái)自簡(jiǎn)書(shū)栗弟,作者:就是楊宗
原文鏈接:http://www.reibang.com/p/e81452a19228