在Java中,類(lèi)的訪(fǎng)問(wèn)權(quán)限主要有四種:public、protected、默認(rèn)(無(wú)修飾符)和private。這些訪(fǎng)問(wèn)權(quán)限決定了類(lèi)、變量、方法和構(gòu)造函數(shù)的可見(jiàn)性范圍。
public:public訪(fǎng)問(wèn)權(quán)限是最寬松的,表示該類(lèi)、方法或變量可以從任何地方訪(fǎng)問(wèn)。當(dāng)一個(gè)類(lèi)被聲明為public時(shí),其他任何類(lèi)都可以直接實(shí)例化這個(gè)類(lèi)或者訪(fǎng)問(wèn)它的public方法和變量。
protected:protected訪(fǎng)問(wèn)權(quán)限介于public和默認(rèn)之間。表示該類(lèi)、方法或變量可以被同一個(gè)包內(nèi)的其他類(lèi)訪(fǎng)問(wèn),以及所有子類(lèi)(無(wú)論是否在同一個(gè)包內(nèi))訪(fǎng)問(wèn)。如果一個(gè)類(lèi)是protected的,那么它可以被同一個(gè)包內(nèi)的其他類(lèi)以及所有子類(lèi)訪(fǎng)問(wèn)。
默認(rèn)(無(wú)修飾符):當(dāng)類(lèi)、方法或變量沒(méi)有指定訪(fǎng)問(wèn)權(quán)限時(shí),它們的訪(fǎng)問(wèn)權(quán)限默認(rèn)為默認(rèn)。這意味著它們只能在同一個(gè)包內(nèi)的其他類(lèi)訪(fǎng)問(wèn)。這種訪(fǎng)問(wèn)權(quán)限適用于只在同一個(gè)包內(nèi)使用的類(lèi)、方法和變量。
private:private訪(fǎng)問(wèn)權(quán)限是最嚴(yán)格的,表示該類(lèi)、方法或變量只能在聲明它的類(lèi)內(nèi)部訪(fǎng)問(wèn)。私有成員不能被外部類(lèi)訪(fǎng)問(wèn),也不能被子類(lèi)繼承。通常,對(duì)于不希望被外部訪(fǎng)問(wèn)的成員(如實(shí)現(xiàn)細(xì)節(jié)),我們會(huì)使用private修飾符。
以下是一個(gè)簡(jiǎn)單的示例,展示了不同訪(fǎng)問(wèn)權(quán)限的類(lèi)定義:
// public類(lèi)
public class PublicClass {
public int publicVar;
protected int protectedVar;
int defaultVar;
private String privateVar = "default";
}
// 默認(rèn)訪(fǎng)問(wèn)權(quán)限類(lèi)
class DefaultClass {
int defaultVar;
}
// 子類(lèi)
class SubClass extends PublicClass {
void accessMembers() {
// 可以訪(fǎng)問(wèn)父類(lèi)的public和protected成員
publicVar = 1;
protectedVar = 2;
// 無(wú)法訪(fǎng)問(wèn)父類(lèi)的defaultVar和privateVar
}
}