java
Dalam bab ini, kita akan membahas kelas dalam Java.
Di Java, seperti halnya metode, variabel dari suatu kelas juga dapat memiliki kelas lain sebagai anggotanya. Menulis kelas di dalam kelas lain diperbolehkan di Jawa. Kelas yang ditulis di dalamnya disebut kelas bersarang , dan kelas yang menampung kelas dalam disebut kelas luar .
Sintaks
Berikut ini adalah sintaks untuk menulis kelas bersarang. Di sini, kelas Outer_Demo adalah kelas luar dan kelas Inner_Demo adalah kelas bersarang.
class Outer_Demo { class Inner_Demo { } }
Kelas bersarang dibagi menjadi dua jenis −
Kelas bersarang non-statis Ini adalah anggota kelas non-statis.
Kelas bersarang statis Ini adalah anggota statis dari sebuah kelas.
Kelas dalam adalah mekanisme keamanan di Jawa. Kita tahu sebuah kelas tidak dapat diasosiasikan dengan pengubah akses pribadi , tetapi jika kita memiliki kelas sebagai anggota kelas lain, maka kelas dalam dapat dibuat pribadi. Dan ini juga digunakan untuk mengakses anggota pribadi dari suatu kelas.
Kelas dalam terdiri dari tiga jenis tergantung pada bagaimana dan di mana Anda mendefinisikannya. Mereka adalah
Membuat kelas dalam cukup sederhana. Anda hanya perlu menulis kelas di dalam kelas. Tidak seperti kelas, kelas dalam dapat menjadi pribadi dan setelah Anda mendeklarasikan kelas dalam sebagai pribadi, kelas dalam tidak dapat diakses dari objek di luar kelas.
Berikut ini adalah program untuk membuat kelas dalam dan mengaksesnya. Dalam contoh yang diberikan, kami membuat kelas dalam menjadi pribadi dan mengakses kelas melalui sebuah metode.
Contoh
Demo Langsungclass Outer_Demo { int num; // inner class private class Inner_Demo { public void print() { System.out.println("This is an inner class"); } } // Accessing he inner class from the method within void display_Inner() { Inner_Demo inner = new Inner_Demo(); inner.print(); } } public class My_class { public static void main(String args[]) { // Instantiating the outer class Outer_Demo outer = new Outer_Demo(); // Accessing the display_Inner() method. outer.display_Inner(); } }
Di sini Anda dapat mengamati bahwa Outer_Demo adalah kelas luar, Inner_Demo adalah kelas dalam, display_Inner() adalah metode di mana kita membuat instance kelas dalam, dan metode ini dipanggil dari main metode.
Jika Anda mengkompilasi dan menjalankan program di atas, Anda akan mendapatkan hasil sebagai berikut
Keluaran
This is an inner class.
Seperti disebutkan sebelumnya, kelas dalam juga digunakan untuk mengakses anggota pribadi kelas. Misalkan, sebuah kelas memiliki anggota pribadi untuk mengaksesnya. Tulis kelas dalam di dalamnya, kembalikan anggota pribadi dari metode di dalam kelas dalam, katakanlah, getValue() , dan terakhir dari kelas lain (dari mana Anda ingin mengakses anggota pribadi) panggil metode getValue() dari kelas dalam.
Untuk membuat instance kelas dalam, awalnya Anda harus membuat instance kelas luar. Setelah itu, dengan menggunakan objek kelas luar, berikut adalah cara untuk menginisiasi kelas dalam.
Outer_Demo outer = new Outer_Demo(); Outer_Demo.Inner_Demo inner = outer.new Inner_Demo();
Program berikut menunjukkan cara mengakses anggota pribadi kelas menggunakan kelas dalam.
Contoh
Demo Langsungclass Outer_Demo { // private variable of the outer class private int num = 175; // inner class public class Inner_Demo { public int getNum() { System.out.println("This is the getnum method of the inner class"); return num; } } } public class My_class2 { public static void main(String args[]) { // Instantiating the outer class Outer_Demo outer = new Outer_Demo(); // Instantiating the inner class Outer_Demo.Inner_Demo inner = outer.new Inner_Demo(); System.out.println(inner.getNum()); } }
Jika Anda mengkompilasi dan menjalankan program di atas, Anda akan mendapatkan hasil sebagai berikut
Keluaran
This is the getnum method of the inner class: 175
Di Java, kita bisa menulis kelas di dalam metode dan ini akan menjadi tipe lokal. Seperti variabel lokal, ruang lingkup kelas dalam dibatasi dalam metode.
Kelas dalam metode-lokal hanya dapat dipakai di dalam metode di mana kelas dalam didefinisikan. Program berikut menunjukkan cara menggunakan kelas dalam metode-lokal.
Contoh
Demo Langsungpublic class Outerclass { // instance method of the outer class void my_Method() { int num = 23; // method-local inner class class MethodInner_Demo { public void print() { System.out.println("This is method inner class "+num); } } // end of inner class // Accessing the inner class MethodInner_Demo inner = new MethodInner_Demo(); inner.print(); } public static void main(String args[]) { Outerclass outer = new Outerclass(); outer.my_Method(); } }
Jika Anda mengkompilasi dan menjalankan program di atas, Anda akan mendapatkan hasil sebagai berikut
Keluaran
This is method inner class 23
Kelas dalam yang dideklarasikan tanpa nama kelas dikenal sebagai kelas dalam anonim . Dalam kasus kelas dalam anonim, kami mendeklarasikan dan membuat instance mereka secara bersamaan. Umumnya, mereka digunakan kapan pun Anda perlu mengganti metode kelas atau antarmuka. Sintaks kelas dalam anonim adalah sebagai berikut
Sintaks
AnonymousInner an_inner = new AnonymousInner() { public void my_method() { ........ ........ } };
Program berikut menunjukkan cara mengganti metode kelas menggunakan kelas dalam anonim.
Contoh
Demo Langsungabstract class AnonymousInner { public abstract void mymethod(); } public class Outer_class { public static void main(String args[]) { AnonymousInner inner = new AnonymousInner() { public void mymethod() { System.out.println("This is an example of anonymous inner class"); } }; inner.mymethod(); } }
Jika Anda mengkompilasi dan menjalankan program di atas, Anda akan mendapatkan hasil sebagai berikut
Keluaran
This is an example of anonymous inner class
Dengan cara yang sama, Anda dapat mengganti metode kelas beton serta antarmuka menggunakan kelas dalam anonim.
Secara umum, jika suatu metode menerima objek antarmuka, kelas abstrak, atau kelas konkret, maka kita dapat mengimplementasikan antarmuka, memperluas kelas abstrak, dan meneruskan objek ke metode. Jika itu adalah sebuah kelas, maka kita bisa langsung meneruskannya ke metode.
Tetapi dalam ketiga kasus tersebut, Anda dapat meneruskan kelas dalam anonim ke metode. Berikut adalah sintaks untuk melewatkan kelas dalam anonim sebagai argumen metode
obj.my_Method(new My_Class() { public void Do() { ..... ..... } });
Program berikut menunjukkan cara melewatkan kelas dalam anonim sebagai argumen metode.
Contoh
Demo Langsung// interface interface Message { String greet(); } public class My_class { // method which accepts the object of interface Message public void displayMessage(Message m) { System.out.println(m.greet() + ", This is an example of anonymous inner class as an argument"); } public static void main(String args[]) { // Instantiating the class My_class obj = new My_class(); // Passing an anonymous inner class as an argument obj.displayMessage(new Message() { public String greet() { return "Hello"; } }); } }
Jika Anda mengkompilasi dan menjalankan program di atas, itu memberi Anda hasil sebagai berikut
Keluaran
Hello, This is an example of anonymous inner class as an argument
Kelas dalam statis adalah kelas bersarang yang merupakan anggota statis dari kelas luar. Itu dapat diakses tanpa membuat instance kelas luar, menggunakan anggota statis lainnya. Sama seperti anggota statis, kelas bersarang statis tidak memiliki akses ke variabel instan dan metode kelas luar. Sintaks kelas bersarang statis adalah sebagai berikut −
Sintaks
class MyOuter { static class Nested_Demo { } }
Membuat instance kelas bersarang statis sedikit berbeda dari membuat instance kelas dalam. Program berikut menunjukkan cara menggunakan kelas bersarang statis.
Contoh
Demo Langsungpublic class Outer { static class Nested_Demo { public void my_method() { System.out.println("This is my nested class"); } } public static void main(String args[]) { Outer.Nested_Demo nested = new Outer.Nested_Demo(); nested.my_method(); } }
Jika Anda mengkompilasi dan menjalankan program di atas, Anda akan mendapatkan hasil sebagai berikut
Keluaran
This is my nested class
java
Kelas Java ByteArrayOutputStream Dalam tutorial ini, kita akan belajar tentang Java ByteArrayOutputStream dan metodenya dengan bantuan contoh. ByteArrayOutputStream kelas java.io paket dapat digunakan untuk menulis larik data keluaran (dalam byte). Ini memperluas OutputStream kelas abstrak. Cat
Kelas Java BufferedInputStream Dalam tutorial ini, kita akan belajar tentang Java BufferedInputStream dan metodenya dengan bantuan contoh. BufferedInputStream kelas java.io package digunakan dengan aliran input lain untuk membaca data (dalam byte) dengan lebih efisien. Ini memperluas InputStream k
Kelas Java PrintStream Dalam tutorial ini, kita akan belajar tentang kelas Java PrintStream dan metode print() dan printf() dengan bantuan contoh. PrintStream kelas java.io package dapat digunakan untuk menulis data keluaran dalam bentuk (teks) yang dapat dibaca secara umum alih-alih byte. Ini mem
Kelas Pembaca Java Dalam tutorial ini, kita akan belajar tentang Java Reader, subclass-nya dan metodenya dengan bantuan sebuah contoh. Reader kelas java.io package adalah superclass abstrak yang mewakili aliran karakter. Sejak Reader adalah kelas abstrak, itu tidak berguna dengan sendirinya. Namun