1. 程式人生 > >黑馬程式設計師——Java之內部類

黑馬程式設計師——Java之內部類

一: 內部類的訪問規則:
* (1)內部類可以直接訪問外部類中的成員,包括外部類中的私有成員(之所以可以直接訪問外部類中的成員,是因為內部類中持有了一個外部類的引用,格式:外部類名.this)
* (2)外部類要訪問內部類就必須先建立內部類的物件
* (3)在外部類的外面要想訪問內部類,首先先建立內部類的物件和外部類物件,然後再指明內部類在那個外部類中(格式:Outer.Inner in=new Outer().new Inner();)
* (4)所學的類中僅僅只有內部類可以被private修飾
二: 內部類的訪問格式:
* (1)當內部類定義在外部類的成員位置上時,而且是非私有,可以在外部其他類中,建立內部類的物件
* 格式:外部類名.內部類名 內部類物件名=外部類物件.內部類物件(此時內部類物件就相當於是外部類的成員,故需要外部類的物件呼叫)
* Outer Inner in=new Outer().new Inner();
* (2)當內部類在外部類的成員位置上時,就可以被成員修飾符所修飾。
* 比如:private:(相當於將內部類在外部類中進行了封裝)
* static:此時內部類就具備了static的特性,也就是說,當內部類被static修飾後,只能直接訪問外部類中的靜態成員,出現了訪問侷限
* a:在外部其他類中,直接訪問static內部類中的非靜態成員,格式:new Outer.Inner().function();(Inner是Outer的靜態內部類,function()是Inner的非靜態方法)
* b:在其他外部類中,直接訪問static內部類中的靜態成員,格式:Outer.Inner.function();(Inner是Outer的靜態的內部類,function()是Inner的靜態的成員函式)

class Outer{//定義外部類
           static private int x=3;
     static class Inner1{//定義靜態內部類
         public void function(){//內部類的非靜態方法
            System.out.println("x1="+x);
         }
    }

     static class Inner2{//定義靜態內部類
         static void fun(){/內部類的靜態方法
             System.out.println("x2="+x);
         }
     }

     public
void method(){ new Outer.Inner1().function();//外部類的非靜態方法訪問靜態內部類的非靜態方法 } } public class InnerClass {//外部其他類 public static void main(String[] args) {//程式入口 Outer outer=new Outer(); outer.method(); Outer.Inner2.fun();//在外部其他類中訪問靜態內部類中的靜態方法 } }

三: 注意:
(1)當內部類中定義了靜態成員時,該內部類必須定義成靜態內部類
* (2)當外部類中的靜態方法訪問內部類時,內部類也必須定義成靜態內部類