Java基础--访问权限控制符
今天我們來(lái)探討一下訪(fǎng)問(wèn)權(quán)限控制符。
使用場(chǎng)景一:攻城獅A編寫(xiě)了ClassA,但是他不想所有的攻城獅都可以使用該類(lèi),應(yīng)該怎么辦?
使用場(chǎng)景二:攻城獅A編寫(xiě)了ClassA,里面有func1方法和func2方法,但是他只想提供func1給別的攻城獅使用,應(yīng)該怎么辦?
?
此時(shí),應(yīng)該使用Java當(dāng)中的訪(fǎng)問(wèn)權(quán)限控制符:1、默認(rèn)訪(fǎng)問(wèn)權(quán)限 2、public 3、private 4、protected
注意,上述四種訪(fǎng)問(wèn)權(quán)限,只有默認(rèn)訪(fǎng)問(wèn)權(quán)限和public能夠用來(lái)修飾類(lèi)。修飾類(lèi)的變量和方法四種權(quán)限都可以。(本處所說(shuō)的類(lèi)針對(duì)的是外部類(lèi),不包括內(nèi)部類(lèi))
?
1、修飾類(lèi)
默認(rèn)訪(fǎng)問(wèn)權(quán)限:表示在同一包中其他類(lèi)都可以訪(fǎng)問(wèn)該類(lèi)。
public:表示任何一個(gè)類(lèi)都可以訪(fǎng)問(wèn)該類(lèi)。
例子1:
People.java
package test1;class People { //默認(rèn)訪(fǎng)問(wèn)控制符 String name;public People(String name) {this.name = name;}public String getName(){return this.name;} }Main.java
package test1;public class Main {public static void main(String[] args) {People p = new People("攻城獅");System.out.println(p.getName());}}實(shí)驗(yàn)結(jié)果:
?
可以正常輸出結(jié)果[攻城獅]。因?yàn)镻eople類(lèi)使用的是默認(rèn)訪(fǎng)問(wèn)修飾符,在同一個(gè)包里面可以訪(fǎng)問(wèn),而Main.java與People.java在同一包,所以能訪(fǎng)問(wèn)。
?
?
?例子2:
修改Main.java:把Main類(lèi)放置在別的包中,會(huì)有什么情況出現(xiàn)呢?
line2提示:People類(lèi)不可見(jiàn),即找不到的意思。People.java使用默認(rèn)訪(fǎng)問(wèn)修飾符,只能提供給同包的類(lèi)來(lái)訪(fǎng)問(wèn),而現(xiàn)在Main.java放在了test2包中,而People.java是test1包的,所以在不同包是不能放到默認(rèn)訪(fǎng)問(wèn)修飾符類(lèi)的。
?
2、修飾類(lèi)的方法和變量
默認(rèn)訪(fǎng)問(wèn)權(quán)限(包訪(fǎng)問(wèn)權(quán)限):如果類(lèi)的變量和方法使用默認(rèn)訪(fǎng)問(wèn)權(quán)限,就意味著只能在同包的類(lèi)中可以訪(fǎng)問(wèn)到類(lèi)的方法和變量,而不同包的類(lèi)則不能訪(fǎng)問(wèn)類(lèi)的方法和變量。
private:如果一個(gè)類(lèi)的方法和變量使用privagte來(lái)修飾,則只能提供給本類(lèi)訪(fǎng)問(wèn),其他類(lèi)不能訪(fǎng)問(wèn)。
protected:如果一個(gè)類(lèi)的方法和變量使用protected來(lái)修飾,既能提供本類(lèi)訪(fǎng)問(wèn),又能提供給不同包繼承于此類(lèi)的類(lèi)訪(fǎng)問(wèn)方法和變量。
public:如果一個(gè)類(lèi)的方法和變量使用public來(lái)修飾,則任意類(lèi)能訪(fǎng)問(wèn)方法和變量。
?
下面通過(guò)一下例子來(lái)說(shuō)明問(wèn)題:
例子3:
People.java與Main.java位于同類(lèi)
People.java
package test1;class People { //默認(rèn)訪(fǎng)問(wèn)控制符 String name;public People(String name) {this.name = name;}String getName(){//默認(rèn)訪(fǎng)問(wèn)控制符return this.name;} }Main.java
package test1;public class Main {public static void main(String[] args) {People p = new People("攻城獅");System.out.println(p.getName());}}此例子能正常運(yùn)行,主要想測(cè)試一下默認(rèn)修飾符修飾getName(),在同包的類(lèi)中能正常訪(fǎng)問(wèn)。
?
如果此時(shí),把Main.java放于不同的包中,查看能否正常運(yùn)行?
People.java
package test1;class People { //默認(rèn)訪(fǎng)問(wèn)控制符 String name;public People(String name) {this.name = name;}String getName(){//默認(rèn)訪(fǎng)問(wèn)控制符return this.name;} }Main.java
提示,在不同包中,是查看不了使用默認(rèn)訪(fǎng)問(wèn)控制符修飾的方法。
?
例子4:
People.java
package test1;public class People {String name;public People(String name) {this.name = name;}protected String getName(){//protected控制符return this.name;} }Main.java
提示,在不同包中,是查看不了使protected控制符修飾的方法。
?
編寫(xiě)一個(gè)Man類(lèi)繼承于People類(lèi)
Man.java
package test2;import test1.People;public class Man extends People {public Man(String name) {super(name);}public void printName(){System.out.println(this.getName());}}Main.java
package test2; import test1.People;public class Main {public static void main(String[] args) {//People p = new People("攻城獅");//System.out.println(p.getName()); Man m = new Man("工程濕");m.printName();}}Man類(lèi)繼承于People類(lèi),則Man類(lèi)中可以訪(fǎng)問(wèn)到People類(lèi)中protected修飾的方法。
?
轉(zhuǎn)載于:https://www.cnblogs.com/xuyuanjia/p/5574801.html
總結(jié)
以上是生活随笔為你收集整理的Java基础--访问权限控制符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#编程之接口
- 下一篇: 《Java程序设计》学期总结