JAVA基礎之內部類,JAVA基礎部類

來源:互聯網
上載者:User

JAVA基礎之內部類,JAVA基礎部類
JAVA基礎之內部類

2017-01-13

1、java中的內部類都有什嗎?!

    成員內部類

    局部內部類

    匿名內部類

    靜態內部類

2、內部類詳解    •成員內部類

      在一個類的內部再建立一個類,成為內部類

      1)在一個類中使用內部類,可以在內部類中直接存取所在類的私人屬性或方法

 1 class Outer{ 2     //外部類Outer 3     private int i = 111 ;//外部類私人變數 4     class Inner{ 5         //內部類Inner 6         private int j = 222 ;//內部類私人變數 7         public void print(){ 8             System.out.println("外部類的私人屬性"+ i); 9             System.out.println("內部類的私人屬性"+ j);10         }11     }12 }13 public class ClassDemo5 {14     public static void main(String[] args) {15         Outer o = new Outer() ;16         Outer.Inner i = o.new Inner() ; 17         i.print() ;18     }    19 }

       2)內部類的執行個體化方法

import 物件導向基礎.Outer.Inner;  
//第一種方式:匯入import 物件導向基礎.Outer.Inner;包
Outer.Inner i = o.new Inner() ; //第二種方式:外部類.內部類 對象名 = 外部類對象.new 內部類

         3)外部類訪問內部類

 1 class Fatch{ 2     //外部類Fatch 3     public class Student{ 4         //內部類Student 5         public void show(){ 6             //內部類show()方法 7             System.out.println("內部類Student的show()方法"); 8         } 9     }10     public void print(){11         /**12          * 外部類不可以直接存取內部類的屬性或方法,13          * 必須建立內部類對象才可以訪問14          */15         new Student().show() ;    //使用匿名對象執行個體化調用內部類的類成員16         System.out.println("外部類Fatch的print()方法");17     }18 }19 public class ClassDemo4 {20     public static void main(String[] args) {21         Fatch f = new Fatch() ;    //執行個體化外部類對象22         f.print() ;    //調用外部類的print()方法23     }24 }

      4)如果外部類和內部類具有相同的成員變數或方法,內部類預設訪問自己的成員變數或方法,如果要訪問外部類的成員變數,可以使用 this 關鍵字。

 1 class Outer1 { 2     //外部類 3     private int i = 10 ;//外部類私人變數 4     class Inner1{ 5         //內部類 6         private int i = 20 ;//內部類私人變數 7         public void show(){ 8             //內部類方法 9             System.out.println("內部類的變數"+ this.i );//使用this關鍵字訪問內部類成員10             System.out.println("外部類的變數"+ Outer1.this.i);//使用外部類名.this.變數名 來訪問外部類成員11         }12     }13     public void print(){14         new Inner1().show() ;    //調用內部類方法15     }16 }17 public class ClassDemo6 {18     public static void main(String[] args) {19         new Outer1().print() ;  20     }21 22 }

   

        •注意點:

          »執行個體化內部類之前必須執行個體化外部類

          »內部類可以隨意訪問他的外部類成員,但外部類不可以直接存取內部類的類成員

          »內部類可以被聲明為private 或 protected 許可權的訪問

          »內部類對象會依賴於外部類對象,除非已經存在一個外部類對象,否則類中不會出現內部類對象

 

    •局部內部類(方法內部類)

      內部類不僅可以在類中進行定義,也可以在類的局部位置進行定義,例如在類的方法或者任意的範圍中都可以定義內部類

         1)在外部類的方法中定義一個方法內部類

 1 class Demo1{ 2     //外部類Demo 3      final int I = 10 ;//外部類定義的常量 4      public void show(){    //外部類的show()方法 5          class Inne{        //方法內部類 6              int j = 20 ;    //方法內部類變數 7              private void inshow() {    //方法內部類中的inshow()方法 8                  System.out.println("外部類常量"+ I ); 9                  System.out.println("方法內部類變數"+ j );10             }11          }12          Inne in = new Inne()  ;    //執行個體化內部類對象13          in.inshow() ;    //調用內部類方法14      }15 }16 public class ClassDemo7 {17     public static void main(String[] args) {18         Demo1 d = new Demo1() ;19         d.show() ;20     }21 }

    注意:如果方法中的參數需要被傳遞進去,就必須把參數聲明成final類型

 

      •靜態內部類

      如果一個內部類被聲明為static,此內部類就稱為外部類 

       1)靜態內部類可以通過(new 外部類名.內部類.內部類方法名) ,來調用靜態內部類方法

 1 class Outer2{ 2     //外部類 3     private static String str = "張博傑" ;//外部類的靜態變數 4     static class Inner2{ 5         //使用static聲明 的靜態內部類 6         public void fun() { 7             //靜態內部類方法 8             System.out.println("外部類的靜態變數"+" "+ str); 9         }10     }11 }12 public class ClassDemo8 {13     public static void main(String[] args) {14         new Outer2.Inner2().fun() ;15         //靜態內部類可以使用new 外部類名.內部類.內部類方法名 ,來調用靜態內部類方法16     }17 }

 

       

        •匿名內部類

          匿名內部類也就是沒有名字的內部類,正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化代碼編寫.使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個介面

          1)匿名內部類的實現

 1 abstract class A2 {    //抽象類別A2 2     public abstract void eat() ; 3 } 4 public class ClassDemo9 { 5     public static void main(String[] args) { 6         /** 7          * 如果A2這個抽象類別只用一次,那麼就可一使用匿名內部類來實現 8          */ 9         A2 a = new A2(){10             public void eat(){11                 System.out.println("我要吃飯");12             }13         } ;14         a.eat() ;15     }16 }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.