天天看點

初見“子母類”-内部類 | 帶你學《Java面向對象程式設計》之八十二

上一篇:教你如何自定義“異常” | 帶你學《Java面向對象程式設計》之八十一

【本節目标】

通過閱讀本節内容,你将了解到使用内部類的原因,并能夠在合适的場合中使用簡單的内部類優化代碼調用邏輯,使代碼更加簡潔。

雖然在類之中的基本組成就是成員屬性與方法,但是在任何的語言裡面結構也是允許進行嵌套的,是以在一個類的内部可以定義其它的類,這樣的類就稱為是内部類。

内部類基本定義

如果說到内部類肯定其本身是一個獨立且完善的類結構,在一個類的内部除了屬性和方法外,可以繼續使用class定義類。

範例:内部類的基本定義

class Outer {           //外部類
    private String msg = "www.mldn.cn" ;   //私有成員屬性
    public void fun() {            //普通方法
          Inner in = new Inner() ;              //執行個體化内部類對象
          in.print() ;            //調用内部類方法
    }
    class Inner {           //在Outer類的内部定義了Inner類
         public void print() {
             System.out.println(Outer.this.msg) ;             //Outer類中的屬性
         }   //www.mldn.cn
    }
}
public class JavaDemo{
    public static void main(String args[])  {
        Outer out = new Outer() ;              //執行個體化外部類對象
        out.fun() ;           //調用外部類中的方法
    }
}           

從整個代碼上實際上發現内部類的結構并不難了解,甚至可以說其結構跟普通類一樣清晰明了,那麼為什麼會提供有内部類這樣的結構呢?

因為從整體的代碼結構來講,内部類的結構并不合理,是以内部類本身最大的一個缺陷在于破壞了程式的結構,但是破壞需要有目的的破壞,那麼它也一定會有其優勢,如果要想更好的觀察出内部類的優勢,就可以将内部類拿到外面。

範例:将以上程式分為兩個類

class Outer {           //外部類
    private String msg = "www.mldn.cn" ;   //私有成員屬性
    public void fun() {            //普通方法
        //思考五:需要将目前對象Outer傳遞到Inner類之中
        Inner in = new Inner(this) ;              //執行個體化内部類對象
        in.print() ;            //調用内部類方法
    }
   //思考一:msg的屬性如果要被外部通路需要提供有getter方法
    public String getMsg() {
        return this.msg ;
    }
}
class Inner {           //在Outer類的内部定義了Inner類
    //思考三:Inner這個類對象執行個體化的時候需要Outer類的引用
    private Outer out ;
   //思考四:應該通過Inner類的構造方法擷取Outer類對象
    public Inner(Outer out) {
        this.out = out ;
    }
    public void print() {
    //思考二:如果要想調用外部類中的getter方法,那麼一定需要有Outer類對象
        System.out.println(this.out.getMsg()) ;             //Outer類中的屬性
    }             //www.mldn.cn
}
public class JavaDemo{
    public static void main(String args[])  {
        Outer out = new Outer() ;              //執行個體化外部類對象
        out.fun() ;           //調用外部類中的方法
    }
}           

可以發現,整體的操作之中,主要的目的就是為了讓Inner這個内部類可以通路Outer這個外部類中的私有屬性,但是如果不用内部類的時候整體代碼非常的麻煩,是以可以得出内部類的優點:輕松的通路外部類中的私有屬性。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:了解内部類,請讀這份“說明書” | 帶你學《Java面向對象程式設計》之八十三 更多Java面向對象程式設計文章檢視此處