java 內部類

來源:互聯網
上載者:User

標籤:java   bst   分類   一個   system   執行個體   splay   his   通過   

內部類(innerclasses)

    一般情況,我們把類定義成獨立的單元。有些情況下,我們把一個類放在另一個類的內部定義,稱為內部類。

 

內部類的作用:

    1.    內部類提供了更好的封裝。只能讓外部類直接存取,不允許同一個包中的其他類直接存取。

    2.    內部類可以直接存取外部類的私人屬性,內部類被當成其外部類的成員。 但外部類不能訪問內部類的內部屬性。

 內部類的使用場合:

    由於內部類提供了更好的封裝特性,並且可以很方便的訪問外部類的屬性。所以,通常內部類在只為所在外部類提供服務的情況下優先使用。

 

內部類的分類:

    1.    成員內部類(可以使用private、proteted、public任意進行修飾。 類檔案:外部類$內部類.class)

    a)    非靜態內部類(外部類裡使用非靜態內部類和平時使用其他類沒什麼不同)

i.    非靜態內部類必須寄存在一個外部類對象裡。因此,如果有一個非靜態內部類對象那麼一定存在對應的外部類對象。 非靜態內部類對象單獨屬於外部類的某個對象。

ii.    非靜態內部類可以使用外部類的成員,但是外部類不能直接存取非靜態內部類成員。

iii.    非靜態內部類不能有靜態方法、靜態屬性、靜態初始化塊。

iv.    靜態成員不能訪問非靜態成員:外部類的靜態方法、靜態代碼塊不能訪問非靜態內部類,包括不能使用非靜態內部類定義變數、建立執行個體。

v.    成員變數訪問要點:

    1.    內部類裡方法的局部變數:變數名

    2.    內部類屬性:this.變數名

    3.    外部類屬性:外部類名.this.變數名

vi.    內部類的訪問:

    1.    外部類中定義內部類:  new InnerClass()

    2.    外部類以外的地方使用非靜態內部類: 
 Outer.inner  varname = OuterObject.new Inner()

/** * 內部類 * @author OU * */public class InnerClasses {  public static void main(String[] args) {    /*Face face=new Face();    Face.Nose nose=face.new Nose();    nose.breath();    */    Face.Ear ear=new Face.Ear();    ear.listen();      }    }class Face{    int type;        String face="瓜子臉";        /**     * 非靜態內部類  for example     * @author OU     *     */    class Nose{        int type;                  void breath(){     //調用的是外部的type    System.out.println(Face.this.type);        //如果內部類沒有外部類的屬性可以直接調用    System.out.println(face);        }    }        /**     * 靜態內部類 for example     */static class Ear{    void listen(){        System.out.println("我在聽");    }}        }
InnerClasses

 

 b) 靜態內部類

i.    定義方式:

static  class   ClassName {

//類體

}

ii.    使用要點:

    1.    當一個靜態內部類對象存在,並不一定存在對應的外部類對象。 因此,靜態內部類的執行個體方法不能直接存取外部類的執行個體方法。

    2.    靜態內部類看做外部類的一個靜態成員。 因此,外部類的方法中可以通過:靜態內部類.名字  訪問靜態內部類的靜態成員。通過 new 靜態內部類()訪問靜態內部類的執行個體。

    3.    在外部類的外面建立靜態內部類:

Face.TestStaticInner  aInner = new  Face.TestStaticInner();

 2. 匿名內部類

    適合那種只需要使用一次的類。比如:鍵盤監聽操作等等。文法:

new  父類構造器(實參類表) 實現介面 () {

//匿名內部類類體!

}

   

abstract class Person {    public abstract void eat();} public class Demo {    public static void main(String[] args) {        Person p = new Person() {            public void eat() {                System.out.println("eat something");            }        };        p.eat();    }}運行結果:eat something
Person 匿名內部類

 

 

 

局部內部類

定義在方法內部。範圍只限於本方法。用的非常少。

java 內部類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.