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

首頁 > 學院 > 開發設計 > 正文

Java 之 內部類

2019-11-15 00:42:00
字體:
來源:轉載
供稿:網友
java 之 內部類

(static修飾的成員屬于整個類,而不屬于單個對象)

定義:將一個類放到另一個類的內部定義,這個在內部定義的類就叫做內部類(也有的成嵌套類),包含內部類的類被稱為外部類(也有的稱宿主類)。

1。非靜態內部類

沒有使用static修飾的內部類就是非靜態內部類。

注意:a。java不允許在非靜態內部類中定義靜態成員

b。當調用非靜態內部類中的實例方法時,必須有一個非靜態成員內部類實例,非靜態內部類實例必須寄生在外部實例內

c。如果外部類成員變量與內部類成員變量與內部類里的方法的局部變量同名,可通過this,外部類類名.this 作為限定來加以區分

public class Test {    PRivate String prop = "外部類的實例變量";        public class InClass{        private String prop = "內部類中的實例變量";        public void info(){            String prop = "局部變量";            System.out.println("外部類的實例變量值:"+Test.this.prop);            System.out.println("內部類的實例變量值:" + this.prop);            System.out.println("局部變量:" + prop);        }    }    public void test(){        InClass ic = new InClass();        ic.info();    }    public static void main(String[] args){        /*         * Test ts = new Test();         * ts.test();         * 上下的代碼作用一樣         */        new Test().test();    }}

使用非靜態內部類:

在外部類以外的地方定義內部類的語法格式: OuterClass.InnerClass VarName

在外部類以外的地方創建非靜態內部類實例的語法: OuterInstace .new InnerConstructor()

class Out{    class In    {        public In(String msg){            System.out.println(msg);        }    }}public class CreateInnerInstance {    public static void main(String[] args){        //OuterClass.InnerClass varName = new OutInstance.new InnearConstructor();        Out.In in = new Out().new In("測試信息");        /*Out.In in;        *Out out = new Out();        *in2 = out.new In("測試信息");      */       }}

2.靜態內部類

靜態內部類是用static修飾的內部類,也稱類內部類。

a。靜態內部類不能訪問外部類的實例成員,只能訪問外部類的類成員(同為static 修飾)。

c。外部類依然不能訪問靜態內部類中的成員,但可以使用靜態內部類的類名作為調用者來訪問靜態內部類中的類成員,也可以使用靜態內部類對象作為調用者來訪問靜態內部類中的實例變量。

public class StaticInnerClassTest {    private int prop = 5 ;    private static int prop1 = 6 ;    static class InClass{        public void accessOuterProp(){                    private static int prop = 5;                                                                          private int prop1 = 6;         //System.out.println(prop);   //這句代碼會出錯,靜態內部類無法訪問外部類的非靜態成員                                    System.out.println(prop1);        }    }    public void accessInnerPro(){  //通過靜態內部類的類名訪問靜態內部類中的類成員       System.out.println(InClass.prop);  //通過靜態內部類對象作為調用者來訪問靜態內部類中的實例變量  SYstem.out.println(new InClass().prop1);    }}

在外部類以外使用使用靜態內部類:(和使用非靜態比較,相類似)語法: new OuterClass.InnerConstructor()

class Out{    static class In    {        public In(){            System.out.println("靜態內部類的構造器");        }    }}public class CreateStaticInnerInstance {    public static void main(String[] args){        Out.In in = new Out.In();    }}

3.匿名內部類如果把一個內部類放到方法中定義,則這個內部類就是一個局部內部類,局部內部類僅在該方法里有效。

定義匿名內部類的格式:

new 實現接口 | 父類構造器(實參列表){  類體部分}

可以看出,匿名內部類必須繼承一個父類或者實現一個接口。

interface Product{    public Double getPrice();    public String getName();}public class AnonymTest {        public void ce(Product p){        System.out.println("購買了一個" + p.getName() + ",花掉了" + p.getPrice());    }    public static void main(String[] args){        AnonymTest  at = new AnonymTest();        at.ce(new Product() {            @Override            public Double getPrice() {                return 0.5;            }            @Override            public String getName() {                return "辣條";            }        });    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五寨县| 景泰县| 阿巴嘎旗| 辽宁省| 涞源县| 阳朔县| 密云县| 周至县| 松滋市| 柞水县| 吉水县| 瑞安市| 泾川县| 收藏| 汶上县| 宜昌市| 葫芦岛市| 灵川县| 儋州市| 广东省| 增城市| 苏尼特右旗| 牟定县| 海门市| 永吉县| 广安市| 公主岭市| 宜川县| 江油市| 昭平县| 洛南县| 达日县| 凌源市| 厦门市| 宜章县| 长白| 永寿县| 铁岭县| 原阳县| 青海省| 云浮市|