您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Java中如何使用內(nèi)部類,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
很多時(shí)候我們創(chuàng)建類的對(duì)象的時(shí)候并不需要使用很多次,每次只使用一次,這個(gè)時(shí)候我們就可以使用內(nèi)部類了
內(nèi)部類就是在一個(gè)類的內(nèi)部在定義一個(gè)類,比如,A類中定義一個(gè)B類,那么B類相對(duì)A類來說就稱為內(nèi)部類,而A類相對(duì)B類來說就是外部類了。
內(nèi)部類不是在一個(gè)java源文件中編寫倆個(gè)平行的倆個(gè)類,而是在一個(gè)類的內(nèi)部再定義另外一個(gè)類。 我可以把外邊的類稱為外部類,在其內(nèi)部編寫的類稱為內(nèi)部類。
內(nèi)部類分為四種:
成員內(nèi)部類
靜態(tài)內(nèi)部類
局部內(nèi)部類
匿名內(nèi)部類
注:成員內(nèi)部類中不能寫靜態(tài)屬性和方法
//在A類中申明了一個(gè)B類,此B類就在A的內(nèi)部,并且在成員變量的位置上,所以就稱為成員內(nèi)部類 public class Outer { private int id; class Inner { public void in() { System.out.println("這是內(nèi)部類方法"); } } public void out() { System.out.println("這是外部類方法"); } }
實(shí)例化內(nèi)部類,首先需要實(shí)例化外部類,通過外部類去調(diào)用內(nèi)部類
// 代碼接上 class Test { public static void main(String[] args) { //實(shí)例化成員內(nèi)部類分兩步 //1、實(shí)例化外部類 Outer outObject = new Outer(); //2、通過外部類調(diào)用內(nèi)部類 Outer.Inner inObject = outObject.new Inner(); //測(cè)試,調(diào)用內(nèi)部類中的方法 inObject.in();//打?。哼@是內(nèi)部類方法 } }
分析:
想想如果你要使用一個(gè)類中方法或者屬性,你就必須要先有該類的一個(gè)對(duì)象,同理,一個(gè)類在另一個(gè)類的內(nèi)部,那么想要使用這個(gè)內(nèi)部類,就必須先要有外部類的一個(gè)實(shí)例對(duì)象,然后在通過該對(duì)象去使用內(nèi)部類。
訪問外部類的所有屬性(這里的屬性包括私有的成員變量,方法)
//在A類中申明了一個(gè)B類,此B類就在A的內(nèi)部,并且在成員變量的位置上,所以就稱為成員內(nèi)部類 public class Outer { private String id = "11923020124"; class Inner { public void in() { System.out.println("這是內(nèi)部類方法"); } //內(nèi)部類訪問外部類私有的成員變量 public void getId() { System.out.println("id: " + id); } public void useOut() { out(); } } public void out() { System.out.println("這是外部類方法"); } } class Test { public static void main(String[] args) { //實(shí)例化成員內(nèi)部類分兩步 //1、實(shí)例化外部類 Outer outObject = new Outer(); //2、通過外部類調(diào)用內(nèi)部類 Outer.Inner inObject = outObject.new Inner(); //測(cè)試,調(diào)用內(nèi)部類中的方法 inObject.in();//打?。哼@是內(nèi)部類方法 inObject.getId(); inObject.useOut(); } }
如果內(nèi)部類中的變量名和外部類的成員變量名一樣,要通過創(chuàng)建外部類對(duì)象 "."屬性來訪問外部類屬性,通過this.屬性訪問內(nèi)部類成員屬性
//在A類中申明了一個(gè)B類,此B類就在A的內(nèi)部,并且在成員變量的位置上,所以就稱為成員內(nèi)部類 public class Outer { private String id = "Outer Id"; class Inner { private String id = "Inner Id"; //這個(gè)id跟外部類的屬性id名稱一樣。 public void getInnerId() { System.out.println(id);//輸出Inner Id,內(nèi)部類中的變量會(huì)暫時(shí)將外部類的成員變量給隱藏 } public void getOuterId() { System.out.println(Outer.this.id);//輸出Outer Id,內(nèi)部類中的變量會(huì)暫時(shí)將外部類的成員變量給隱藏 } } public void out() { System.out.println("這是外部類方法"); } } class Test { public static void main(String[] args) { //實(shí)例化成員內(nèi)部類分兩步 //1、實(shí)例化外部類 Outer outObject = new Outer(); //2、通過外部類調(diào)用內(nèi)部類 Outer.Inner inObject = outObject.new Inner(); //測(cè)試,調(diào)用內(nèi)部類中的方法 inObject.getInnerId(); inObject.getOuterId(); } }
說明:
如何調(diào)用外部類的成員變量呢?通過Outer.this,因?yàn)槿绻雽?shí)例化內(nèi)部類對(duì)象,就必須通過外部類對(duì)象,當(dāng)外部類對(duì)象new出內(nèi)部類對(duì)象時(shí),會(huì)把自己(外部類對(duì)象)的引用傳到了內(nèi)部類中,所以內(nèi)部類就可以通過Outer.this來訪問外部類的屬性和方法,到這里,你也就可以知道為什么內(nèi)部類可以訪問外部類 的屬性和方法,這里由于有兩個(gè)相同的屬性名稱,所以需要顯示的用Outer.this來調(diào)用外部類的屬性,平常如果屬性名 不重復(fù),那么我們?cè)趦?nèi)部類中調(diào)用外部類的屬性和方法時(shí),前面就隱式的調(diào)用了Outer.this。
要想訪問內(nèi)部類中的內(nèi)容,必須通過外部類對(duì)象來實(shí)例化內(nèi)部類。
能夠訪問外部類所有的屬性和方法,原理就是在通過外部類對(duì)象實(shí)例化內(nèi)部類對(duì)象時(shí),外部類對(duì)象把自己的引用傳進(jìn)了內(nèi)部類,使內(nèi)部類可以用通過Outer.this去調(diào)用外部類的屬性和方法,一般都是隱式調(diào)用了,但是當(dāng)內(nèi)部類中有屬性或者方法名和外部類中的屬性或方法名相同的時(shí)候,就需要通過顯式調(diào)用Outer.this了。
上述就是小編為大家分享的Java中如何使用內(nèi)部類了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。