CodeGym /Blog Jawa /Acak /Kelas Batin Jawa
John Squirrels
tingkat
San Francisco

Kelas Batin Jawa

Diterbitake ing grup
Ing Jawa sawetara kelas bisa ngemot kelas liyane ing. Kelas kasebut diarani kelas nested. Kelas sing ditetepake ing kelas liyane umume dadi rong kategori - statis lan non-statis. Kelas non-statis bersarang disebut batin. Kelas bersarang sing diumumake statis diarani kelas bersarang statis. Nyatane, ora ana sing rumit ing kene, sanajan terminologi kasebut katon rada kabur lan kadhangkala bisa uga mbingungake pangembang piranti lunak profesional.

Kelas nested lan njero

Dadi kabeh kelas sing ana ing njero kelas liyane diarani kelas Nested.

class OuterClass {
    ...
    class NestedClass {
        ...
    }
}
Kelas Nested sing ora statis diarani Inner Classes , lan sing statis diarani Nested Classes statis . Basa Jawa Batin - 1

class OuterClass {
    ...
    static class StaticNestedClass {
        ...
    }
    class InnerClass {
        ...
    }
}
Mangkono, kabeh Kelas Batin ana Nested, nanging ora kabeh Nested iku Batin. Iki minangka definisi utama. Kelas batin minangka jinis mekanisme keamanan ing Jawa. Kita ngerti yen kelas biasa ora bisa digandhengake karo modifier akses pribadi. Nanging, yen kelas kita anggota saka kelas liyane, banjur kelas batin bisa digawe pribadi. Fitur iki uga digunakake kanggo ngakses anggota kelas pribadi.

Tuladha Inner Class

Dadi, ayo nyoba nggawe sawetara kelas, lan ing njero - kelas liyane. Mbayangno sawetara jinis konsol game modular. Ana "kothak" dhewe, lan modul tartamtu bisa disambungake menyang. Contone, controller game, setir, helm VR, kang, minangka aturan, ora bisa tanpa console dhewe. Ing kene kita duwe kelas GameConsole. Wis 2 kolom lan 1 cara - wiwitan () . Bentenipun antarane GameCosole lan kelas kita digunakake kanggo iku wis kelas GameController internal .

public class GameConsole {
    private String model;
    private int weight;

    public void run() {
        System.out.println("Game console is on");
    }


    public class GameController {

        private String color;

        public void start() {
            System.out.println("start button is pressed");
        }

        public void x() {
            System.out.println("x button is pressed");
        }

        public void y() {
            System.out.println("y button is pressed");
        }
        public void a() {
            System.out.println("a button is pressed");
        }

        public void b() {
            System.out.println("b button is pressed");
        }
        public void mover() {
            System.out.println("mover button is pressed");
        }

    }

}
Ing wektu iki, sampeyan bisa uga mikir: kenapa ora nggawe kelas kasebut "kapisah"? Sampeyan ora perlu kanggo nggawe nested. Pancen bisa. Nanging, babagan desain kelas sing bener babagan panggunaane. Kelas batin digawe kanggo nyorot ing program entitas sing ora bisa dipisahake karo entitas liyane. Pengontrol utawa, contone, helm VR minangka komponen konsol. Ya, bisa dituku kanthi kapisah saka konsol, nanging ora bisa digunakake tanpa. Yen kita nggawe kabeh kelas iki misahake kelas umum, program kita bisa duwe, contone, kode ing ngisor iki:

public class Main {

   public static void main(String[] args) {
       GameController controller = new GameController();
       controller.x();
   }
}
Apa sing kedadeyan ing kasus iki ora jelas, amarga pengontrol dhewe ora bisa digunakake tanpa konsol. Kita wis nggawe obyek console game. Kita nggawe sub-obyek - pengontrol game. Lan saiki kita bisa muter, mung pencet tombol tengen. Cara sing kita butuhake diarani obyek sing bener. Kabeh iku prasaja lan trep. Ing conto iki, extracting controller game nambah enkapsulasi (kita ndhelikake rincian bagean console nang kelas cocog), lan ngidini kanggo abstraksi luwih rinci. Nanging yen kita, contone, nggawe program sing simulates toko ngendi sampeyan bisa dhewe tuku helm VR utawa controller, conto iki bakal gagal. Ana iku luwih apik kanggo nggawe controller game dhewe. Ayo njupuk conto liyane. Kita kasebut ing ndhuwur yen kita bisa nggawe kelas batin dadi pribadi lan isih diarani saka kelas njaba. Ing ngisor iki conto kelas kasebut.

class OuterClass {
 
   // inner class
   private class InnerClass {
       public void print() {
           System.out.println("We are in the inner class...");
       }
   }

   // method of outer class. We are create an inner class from the method of outer one
   void display() {
       InnerClass inner = new InnerClass();
       inner.print();
   }
}
Ing kene OuterClass minangka kelas njaba, InnerClass minangka kelas njero, tampilan () minangka cara ing njero kita nggawe obyek saka kelas njero. Saiki ayo nulis kelas demo kanthi metode utama ing ngendi kita bakal nggunakake metode tampilan () .

public class OuterDemoMain {

       public static void main(String args[]) {
           // create an object of the outer class
           OuterDemo outer = new OuterDemo();

           outer.display();
       }
}
Yen sampeyan mbukak program iki, sampeyan bakal entuk asil ing ngisor iki:
Kita ing kelas batin ...

Klasifikasi kelas njero

Kelas njero dhewe utawa kelas non-statis sing disarang dadi telung klompok.
  • Inner kelas minangka. Mung siji kelas non-statis ing siji liyane kaya sing dituduhake ing ndhuwur nganggo conto GameConsole lan GameController .
  • Method-local Inner class yaiku kelas ing njero metode.
  • Kelas Inner Anonim.
Basa Jawa Batin - 2

Metode lokal Inner class

Ing Jawa sampeyan bisa nulis kelas nang metode lan iku jinis lokal. Kaya variabel lokal, ruang lingkup kelas batin diwatesi ing sawijining metode. Kelas batin metode-lokal mung bisa digawe ing metode ing ngendi kelas batin ditetepake. Ayo nuduhake carane nggunakake metode lokal kelas njero.

public class OuterDemo2 {
  
   //instance method of the outer class OuterDemo2
   void myMethod() {
       String str = "and it's a value from OuterDemo2 class' myMethod ";

       // method-local inner class
       class methodInnerDemo {
           public void print() {
               System.out.println("Here we've got a method inner class... " );
               System.out.println(str);

           }
       }
      
       // Access to the inner class
       methodInnerDemo inn = new methodInnerDemo();
       inn.print();
   }
}
Saiki kita bakal nulis kelas demo kanthi metode utama ing ngendi kita bakal nggunakake metode njaba () .

public class OuterDemoMain {


   public static void main(String args[]) {
       OuterDemo2 outer = new OuterDemo2();
       outer.myMethod();
   }
}
Output yaiku:
Ing kene kita entuk metode kelas njero ... lan iki minangka nilai saka kelas OuterDemo2 'myMethod

Kelas batin anonim

Kelas batin sing diumumake tanpa jeneng kelas diarani kelas batin anonim. Nalika kita ngumumake kelas batin anonim, kita langsung nggawe instan. Biasane, kelas kasebut digunakake nalika sampeyan kudu ngilangi metode kelas utawa antarmuka.

abstract class OuterDemo3 {
   public abstract void method();

}
   class outerClass {

       public static void main(String args[]) {
           OuterDemo3 inner = new OuterDemo3() {
               public void method() {
                   System.out.println("Here we've got an example of an  anonymous inner class");
               }
           };
           inner.method();
       }
   }
Output ing kene:
Ing kene kita entuk conto kelas batin anonim ...

Anonim Inner Class minangka Argumen

Sampeyan uga bisa ngliwati kelas batin anonim minangka argumen kanggo metode kasebut. Punika conto.

interface OuterDemo4 {
       String hello();
   }

   class NewClass {
       // accepts the object of interface
       public void displayMessage(OuterDemo4 myMessage) {
           System.out.println(myMessage.hello());
           System.out.println("example of anonymous inner class as an argument");
       }

       public static void main(String args[]) {
           NewClass newClass = new NewClass();

           //here we pass an anonymous inner class as an argument
           newClass.displayMessage(new OuterDemo4() {
               public String hello() {
                   return "Hello!";
               }
           });
       }
}
Output ing kene:
Hello! conto kelas batin anonim minangka argumen
Kanggo nguatake apa sing sampeyan sinau, disaranake sampeyan nonton video pelajaran saka Kursus Jawa
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION