class KelasTerluarA {    
       private String pesan = "Objek dari KelasTerluarA ";
    //Method konstruktor untuk kelas KelasTerluarA
    KelasTerluarA(String noObjek) {
      pesan = pesan + noObjek;
    }
    //Method cetak pesan yang dimiliki oleh kelas KelasTerluarA
    public void cetakPesan() { 
      System.out.println(pesan); 
      }
    //Kelas Inner tingkat pertama
    class KelasInnerB {          
        private String pesan = "Objek dari KelasInnerB ";
        //Method konstruktor untuk kelas KelasInnerB
        KelasInnerB(String noObjek) { 
             pesan = pesan + noObjek; 
        }
        //Method cetak pesan yang dimiliki oleh KelasInnerB 
        public void cetakPesan() { 
            System.out.println(pesan); 
        }
        //Kelas Inner tingkat kedua
        class KelasInnerC {             
               private String pesan = "Objek dari KelasInnerC ";
            KelasInnerC(String noObjek) { 
               pesan = pesan + noObjek; 
            }
            //Method cetak pesan yang dimiliki oleh KelasInnerC
            public void cetakPesan() {
                               /** cetakPesan yang dimiliki oleh KelasInnerC */
                System.out.println(pesan);                 
                System.out.println(this.pesan);            
                System.out.println(KelasInnerC.this.pesan);     
                            /** cetakPesan dari variabel yang dimiliki 
                                oleh objek dari KelasInnerB */
                System.out.println(KelasInnerB.this.pesan);     
                KelasInnerB.this.cetakPesan();              
                /** cetakPesan dari variabel yang dimiliki 
                    oleh objek dari KelasInnerA */
                   System.out.println(KelasTerluarA.this.pesan); 
                KelasTerluarA.this.cetakPesan();
                System.out.println("\n");         
            }
        }
    }
}
public class DemoKelasInner {
       /**Main Method*/
    public static void main(String args[]) {                   
        /**
         * Mengakses method cetakPesan yang dimiliki oleh 
         * KelasInnerC yang tersarang pada KelasTerluarA dan 
         * KelasInnerB -- A(B(C)) dengan membuat objekKelasA -> 
         * objekKelasB -> objekKelasC.namaMethod
         */
        KelasTerluarA a = new KelasTerluarA("Cara 1");                        
        KelasTerluarA.KelasInnerB b = a.new KelasInnerB("Cara 1");  
        KelasTerluarA.KelasInnerB.KelasInnerC c = 
        b.new KelasInnerC("Cara 1");          
        c.cetakPesan();      
        /**
         * Mengakses method cetakPesan yang dimiliki oleh 
         * KelasInnerC yang tersarang pada KelasTerluarA dan 
         * KelasInnerB -- A(B(C)) dengan membuat objekKelasB -> 
         * objekKelasC.namaMethod
         */
        KelasTerluarA.KelasInnerB bb = new 
                  KelasTerluarA("Cara 2").new KelasInnerB("Cara 2");
        KelasTerluarA.KelasInnerB.KelasInnerC cc = 
        bb.new KelasInnerC("Cara 2");        
        cc.cetakPesan();
        /**
         * Mengakses method cetakPesan yang dimiliki oleh 
         * KelasInnerC yang tersarang pada KelasTerluarA dan 
         * KelasInnerB -- A(B(C)) dengan membuat 
         * objekKelasC.namaMethod
         */
              KelasTerluarA.KelasInnerB.KelasInnerC ccc = new 
              KelasTerluarA("Cara 3").new KelasInnerB("Cara 3").new 
              KelasInnerC("Cara 3");     
        ccc.cetakPesan();    
    }
}
 
 
 

Post a Comment