国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java_四種常規(guī)內(nèi)部類詳解

2019-11-14 09:42:18
字體:
供稿:網(wǎng)友

一般來說,有4中內(nèi)部類:常規(guī)內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類。 一.常規(guī)內(nèi)部類:常規(guī)內(nèi)部類沒有用static修飾且定義在在外部類類體中。 1.常規(guī)內(nèi)部類中的方法可以直接使用外部類的實(shí)例變量和實(shí)例方法。 2.在常規(guī)內(nèi)部類中可以直接用內(nèi)部類創(chuàng)建對(duì)象 3.代碼如下: public class MyOuter { PRivate int x = 100; // 創(chuàng)建內(nèi)部類 class MyInner { private String y = “Hello!”; public void innerMethod() { System.out.println(“內(nèi)部類中 String =” + y); System.out.println(“外部類中的x =” + x);// 直接訪問外部類中的實(shí)例變量x outerMethod(); System.out.println(“x is” + MyOuter.this.x); } } public void outerMethod() { x++; } public void makeInner() { //在外部類方法中創(chuàng)建內(nèi)部類實(shí)例 MyInner in = new MyInner(); } /** * @param args */ public static void main(String[] args) { MyOuter mo = new MyOuter(); // 使用外部類構(gòu)造方法創(chuàng)建mo對(duì)象 MyOuter.MyInner inner = mo.new MyInner();//常規(guī)內(nèi)部類需要通過外部類的實(shí)例才能創(chuàng)建對(duì)象,與實(shí)例變量需要通過對(duì)象來訪問相似 // 創(chuàng)建inner對(duì)象 inner.innerMethod(); // TODO Auto-generated method stub } } 4.運(yùn)行結(jié)果:

內(nèi)部類中 String =Hello!外部類中的x =100x is101

二.靜態(tài)內(nèi)部類:與類的其他成員相似,可以用static修飾內(nèi)部類,這樣的類稱為靜態(tài)內(nèi)部類。靜態(tài)內(nèi)部類與靜態(tài)內(nèi)部方法相似,只能訪問外部類的static成員,不能直接訪問外部類的實(shí)例變量,與實(shí)例方法,只有通過對(duì)象引用才能訪問。 3.由于static內(nèi)部類不具有任何對(duì)外部類實(shí)例的引用,因此static內(nèi)部類中不能使用this關(guān)鍵字來訪問外部類中的實(shí)例成員,但是可以訪問外部類中的static成員。這與一般類的static方法想通 4.實(shí)例代碼: package com.m.ou; public class MyOuter { public static int x=100; public static class MyInner{ private String y=”Hello!”; public void innerMethod(){ System.out.println(“x=”+x); System.out.println(“y=”+y);

}

} /** * @param args */ public static void main(String[] args) { MyOuter.MyInner si=new MyOuter.MyInner();//靜態(tài)內(nèi)部類不通過外部實(shí)例就可以創(chuàng)建對(duì)象;與類變量可以通過類名訪問相似 si.innerMethod(); // TODO Auto-generated method stub } } 4.運(yùn)行結(jié)果: x=100 y=Hello! 三.局部內(nèi)部類:在方法體或語句塊(包括方法、構(gòu)造方法、局部塊或靜態(tài)初始化塊)內(nèi)部定義的類成為局部內(nèi)部類。 局部內(nèi)部類不能加任何訪問修飾符,因?yàn)樗粚?duì)局部塊有效。 1.局部內(nèi)部類只在方法體中有效,就想定義的局部變量一樣,在定義的方法體外不能創(chuàng)建局部內(nèi)部類的對(duì)象 2.在方法內(nèi)部定義類時(shí),應(yīng)注意以下問題: 1.方法定義局部內(nèi)部類同方法定義局部變量一樣,不能使用private、protected、public等訪問修飾說明符修飾,也不能使用static修飾,但可以使用final和 abstract修飾 2.方法中的內(nèi)部類可以訪問外部類成員。對(duì)于方法的參數(shù)和局部變量,必須有final修飾才可以訪問。 3.static方法中定義的內(nèi)部類可以訪問外部類定義的static成員 3.程序代碼: public class Jubu { private int size=5,y=7; public Object makeInner(int localVar){ final int finalLocalVar=localVar; //創(chuàng)建內(nèi)部類,該類只在makeInner()方法有效,就像局部變量一樣。在方法體外部不能創(chuàng)建MyInner類的對(duì)象 class MyInner{ int y=4; public String toString(){ return “OuterSize:”+size+ “/nfinalLocalVar”+” “+”this.y=”+this.y;

}

}

return new MyInner();

} } class Main{ /** * @param args */ public static void main(String[] args) {

Object obj=new Jubu().makeInner(47);//創(chuàng)建Jubu對(duì)象obj,并調(diào)用它的makeInner()方法,該方法返回一個(gè) //該方法返回一個(gè)MyInner類型的的對(duì)象obj,然后調(diào)用其同toString方法。 System.out.println(obj.toString()); // TODO Auto-generated method stub }

} 4.運(yùn)行結(jié)果:

OuterSize:5 finalLocalVar this.y=4 四.匿名內(nèi)部類:定義類的最終目的是創(chuàng)建一個(gè)類的實(shí)例,但是如果某個(gè)類的實(shí)例只是用一次,則可以將類的定義與類的創(chuàng)建,放到與一起完成,或者說在定義類的同時(shí)就創(chuàng)建一個(gè)類 以這種方法定義的沒有名字的類成為匿名內(nèi)部類。 聲明和構(gòu)造匿名內(nèi)部類的一般格式如下: new ClassOrInterfaceName(){ /類體/ } 1.匿名內(nèi)部類可以繼承一個(gè)類或?qū)崿F(xiàn)一個(gè)接口,這里的ClassOrInterfaceName是匿名內(nèi)部類所繼承的類名或?qū)崿F(xiàn)的接口名。但匿名內(nèi)部類不能同時(shí)實(shí)現(xiàn)一個(gè)接口和繼承一個(gè)類,也不能實(shí)現(xiàn)多個(gè)接口。如果實(shí)現(xiàn)了一個(gè)接口,該類是Object類的直接子類,匿名類繼承一個(gè)類或?qū)崿F(xiàn)一個(gè)接口,不需要extends和implements關(guān)鍵字。

2.由于匿名內(nèi)部類沒有名稱,所以類體中不能定義構(gòu)造方法,由于不知道類名也不能使用關(guān)鍵字來創(chuàng)建該類的實(shí)例。實(shí)際上匿名內(nèi)部類的定義、構(gòu)造、和第一次使用都發(fā)生在同樣一個(gè)地方。此外,上式是一個(gè)表達(dá)式,返回的是一個(gè)對(duì)象的引用,所以可以直接使用或?qū)⑵鋸?fù)制給一個(gè)對(duì)象變量。例:

TypeName obj=new Name(){ /此處為類體/ } 同樣,也可以將構(gòu)造的對(duì)象作為調(diào)用的參數(shù)。例:

someMethod(new Name(){ /此處為類體/ }); 3.程序代碼: public class NiMing { private int size=5; public Object makeInner(int localVar){ final int finalLocalVar=localVar; return new Object(){ //使用匿名內(nèi)部類 public String toString(){ return “OuterSize=”+size+”/nfinalLocalVar=”+finalLocalVar;

}

};

} /** * @param args */ public static void main(String args[]) { Object obj=new NiMing().makeInner(47); System.out.println(obj.toString());

} } 4.程序運(yùn)行結(jié)果: OuterSize=5 finalLocalVar=47


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁蒗| 深水埗区| 图片| 海宁市| 祁东县| 南宁市| 木兰县| 当阳市| 环江| 望都县| 诸城市| 九龙城区| 平罗县| 陈巴尔虎旗| 宝丰县| 常德市| 尉氏县| 额敏县| 贡嘎县| 武威市| 应城市| 灵寿县| 海南省| 原阳县| 泽库县| 龙州县| 稻城县| 长乐市| 凭祥市| 宁陵县| 龙胜| 石渠县| 锦屏县| 观塘区| 阿巴嘎旗| 沭阳县| 昌江| 靖远县| 崇阳县| 宾阳县| 罗山县|