日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java变量访问权限_JAVA成员变量的访问权限

發(fā)布時(shí)間:2024/10/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java变量访问权限_JAVA成员变量的访问权限 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

成員變量的訪問(wèn)權(quán)限

我看到很多地方談到關(guān)于Java里變量的訪問(wèn)權(quán)限問(wèn)題.

很多地方認(rèn)為對(duì)于默認(rèn)修飾符的理解是這樣的:

不寫時(shí)默認(rèn)為friendly

但就我所知Java里沒(méi)有 friendly這一關(guān)鍵字.

當(dāng)然學(xué)過(guò)C++的人都知道,在C++里有 friendly,而且其訪問(wèn)權(quán)限和Java里不寫時(shí)默認(rèn)情況一樣.

我覺(jué)的可以這樣理解,但不能這么認(rèn)為.C++和Java畢竟是兩種不同的語(yǔ)言,許多規(guī)則是不同的.

如果我說(shuō)的有哪里不正確,請(qǐng)大家改正,謝謝.

訪問(wèn)權(quán)限修飾符聲明了成員變量的訪問(wèn)權(quán)限。Java提供的顯示的訪問(wèn)權(quán)限修飾符有3種,分別是:私有(private)、保護(hù)(protected)和公 共(public)。除此之外,還有一種默認(rèn)的訪問(wèn)權(quán)限:friendly,它并不是Java的關(guān)鍵字,只有當(dāng)變量前面沒(méi)有寫明任何訪問(wèn)權(quán)限修飾符時(shí),就 默認(rèn)以friendly作為訪問(wèn)權(quán)限。為了表達(dá)上的方便,省略了其中"成員"兩字,將被這些修飾符所修飾的變量分別稱為私有變量、保護(hù)變量和公共變量。下 面分別討論各個(gè)修飾符的用法。

1.公共變量

凡是被public修飾的成員變量,都稱為公共變量,它可以被任何類所訪問(wèn)。即允許該變量所屬的類中所有方法訪問(wèn),也允許其他類在外部訪問(wèn)。

公共變量使用示例。

public class declarePublic{

public int publicVar=10; //定義一個(gè)公共變量

}

在類declarePublic中聲明了一個(gè)公共變量publicVar,它可以被任何類所訪問(wèn)。下面這段程序中,類otherClass可以合法地修改變量publicVar的值,而無(wú)論otherClass位于什么地方。

public class otherClass{

void change(){

declarePublic ca=new declarePublic(); //創(chuàng)建一個(gè)declarePublic對(duì)象

ca.publicVar=20; //通過(guò)對(duì)象名來(lái)訪問(wèn)它的公共變量,正確

}

}

用public修飾的變量,允許任何類在外部直接訪問(wèn),這破壞了封裝的原則,造成數(shù)據(jù)安全性能下降,所以除非有特別的需要,否則不要使用這種方案。

2.私有變量凡是被private修飾的成員變量,都稱為私有變量。它只允許在本類的內(nèi)部訪問(wèn),任何外部類都不能訪問(wèn)它。

私有變量使用示例。

public class declarePrivate{

private int privateVar=10; //定義一個(gè)私有變量

void change(){

privateVar=20; //在本類中訪問(wèn)私有變量,合法

}

}

如果企圖在類的外部訪問(wèn)私有變量,編譯器將會(huì)報(bào)錯(cuò)。

public class otherClass{

void change(){

declarePrivate ca=new declarePrivate(); //創(chuàng)建一個(gè)declarePrivate對(duì)象

ca.privateVar=20; //企圖訪問(wèn)私有變量,非法

}

}

為了讓外部用戶能夠訪問(wèn)某些私有變量,通常類的設(shè)計(jì)者會(huì)提供一些方法給外部調(diào)用,這些方法被稱為訪問(wèn)接口。下面是一個(gè)改寫過(guò)的declarePrivate類。

public class declarePrivate{

private int privateVar=10; //定義一個(gè)私有變量

void change(){

privateVar=20;

}

public int getPrivateVar(){ //定義一個(gè)接口,返回私有變量privateVar的值

return privateVar;

}

public boolean setPrivateVar(int value){ //定義一個(gè)接口,可以設(shè)置privateVar

的值

//可以在這里先檢測(cè)value是否在允許的范圍內(nèi),然后再執(zhí)行下面的語(yǔ)句。

privateVar = value;

return true;

}

}

私有變量很好地貫徹了封裝原則,所有的私有變量都只能通過(guò)程序員設(shè)計(jì)的接口來(lái)訪問(wèn),任何外部使用者都無(wú)法直接訪問(wèn)它,所以具有很高的安全性。但是,在下面這兩種情況下,需要使用Java另外提供的兩種訪問(wèn)類型:

通過(guò)接口訪問(wèn)私有變量,將降低程序的性能,在程序性能比較重要的情況下,需要在安全性和效率間取得一個(gè)平衡。

私有變量無(wú)法被子類繼承,當(dāng)子類必須繼承成員變量時(shí),需要使用其他的訪問(wèn)類型。

3.保護(hù)變量

凡是被protected修飾的變量,都被稱為保護(hù)變量。除了允許在本類的內(nèi)部訪問(wèn)之外,還允許它的子類以及同一個(gè)包中的其他類訪問(wèn)。子類是指從該類派生出來(lái)的類。包是Java中用于管理類的一種松散的集合。二者的詳細(xì)情況將在第4章介紹。下面是一個(gè)簡(jiǎn)單的例子。

保護(hù)變量使用示例。

下面這個(gè)程序先定義一個(gè)名為onlyDemo的包,declarProtected類就屬于這個(gè)包。

public class declareProtected{

protected int protectedVar=10; //定義一個(gè)保護(hù)變量

void change(){

protectedVar=20; //合法

}

}

說(shuō)明:讀者編譯這個(gè)文件時(shí),需要用這個(gè)命令(下同):

javac -d . 文件名

下面這個(gè)otherClass類也定義在onlyDemo包中,與declareProtected類同屬于一個(gè)包。

public class otherClass{ //它也在包onlyDemo中

void change(){

declareProtected ca=new declareProtected();

ca.protectedVar=20; //合法

}

}

下面這個(gè)deriveClass類是declareProtected的子類,它并不在onlyDemo包中。它也可以訪問(wèn)保護(hù)變量protectedVar,但是只能通過(guò)繼承的方式訪問(wèn)。

import onlyDemo.declareProtected; //引入需要的包

public class deriveClass extends declareProtected{ //定義一個(gè)子類

void change(){

//合法,改變的是deriveClass從declarProtected中所繼承的protectedVar值

protectedVar=30;

}

}

說(shuō)明:import是Java中的關(guān)鍵字,用于引入某個(gè)包。這將在4.13節(jié)中詳細(xì)介紹。

子類如果不在父類的同一包中,是無(wú)法通過(guò)"對(duì)象名.變量名"的方式來(lái)訪問(wèn)protected類型的成員變量,比如下面這種訪問(wèn)是非法的:

import onlyDemo.declareProtected;

public class deriveClass extends declareProtected{ //定義一個(gè)子類

void change(){

declareProtected ca=new declareProtected();

ca.protectedVar=30; //錯(cuò)誤,不允許訪問(wèn)不在同一包中的保護(hù)變量

}

}

4.默認(rèn)訪問(wèn)變量

如果在變量前不加任何訪問(wèn)權(quán)修飾符,它就具有默認(rèn)的訪問(wèn)控制特性,也稱為friendly變量。它和保護(hù)變量非常像,它只允許在同一個(gè)包中的其他類訪問(wèn), 即便是子類,如果和父類不在同一包中,也不能繼承默認(rèn)變量(這是默認(rèn)訪問(wèn)變量和保護(hù)變量的唯一區(qū)別)。因?yàn)樗薅嗽L問(wèn)權(quán)限只能在包中,所以也有人稱默認(rèn) 訪問(wèn)權(quán)限為包訪問(wèn)權(quán)限。

默認(rèn)訪問(wèn)變量使用示例。

package onlyDemo; //本類定義在包中

public class declareDefault{

int defaultVar=10; //定義一個(gè)默認(rèn)訪問(wèn)變量

void change(){

defaultVar=20; //合法

}

}

onlyDemo包中的其他類,可以訪問(wèn)defaultVar變量:

package onlyDemo;

public class otherClass{ //它也在包onlyDemo中

void change(){

declareDefault ca=new declareDefault();

ca.defaultVar=20; //合法

}

}

下面是它的子類,也在onlyDemo包中。它除了可以像包中其他類那樣通過(guò)"對(duì)象名.變量名"來(lái)訪問(wèn)默認(rèn)變量,還可以通過(guò)繼承的方式來(lái)訪問(wèn)。

package onlyDemo;

public class deriveClass extends declareDefault{ //定義一個(gè)子類

void change(){

//合法,改變的是deriveClass從declarDefault中所繼承的defaultVar值

defaultVar=30;

}

}

如果子類不在onlyDemo包中,就不會(huì)繼承默認(rèn)變量,也就無(wú)法像上面那樣來(lái)訪問(wèn)。

import onlyDemo.declareDefault;

public class deriveClass extends declareDefault{ //定義一個(gè)子類

void change(){

defaultVar=30; //非法,這個(gè)變量沒(méi)有繼承下來(lái)

}

}

總結(jié)

以上是生活随笔為你收集整理的java变量访问权限_JAVA成员变量的访问权限的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。