1. Kelas dalaman
Anda baru-baru ini mengetahui bahawa terdapat pembolehubah statik dan kaedah statik. Ternyata terdapat juga kelas statik. Tetapi kita akan mendekati topik ini dari jauh.
Di Java, anda dibenarkan sepenuhnya untuk mengisytiharkan kelas dalam kelas. Dan juga kelas dalam kelas yang berada dalam kelas dalam kelas. Semuanya kelihatan sangat mudah:
class OuterClass
{
variables of the class
methods of the class
class NestedClass
{
variables of the class
methods of the class
}
}
Kami hanya mengisytiharkan satu kelas di dalam kelas lain. Semudah itu.
Contoh:
public class Solution
{
static ArrayList<Point> points = new ArrayList<Point>();
public static void main(String[] args)
{
Point point = new Point();
point.x = 100;
point.y = 200;
points.add(point);
}
static class Point
{
int x;
int y;
}
}
Kelas bersarang boleh menjadi statik atau tidak statik. Kelas bersarang statik hanya dipanggil kelas bersarang statik . Kelas bersarang bukan statik dipanggil kelas dalam ( kelas dalam ).
2. Kelas statik
Kelas bersarang statik boleh digunakan di luar kelas luarnya. Jika kelas sedemikian mempunyai pengubah akses awam, maka ia boleh digunakan di mana-mana sahaja dalam program. Kelas sedemikian hampir tidak dapat dibezakan daripada mana-mana kelas biasa. Tetapi terdapat beberapa perbezaan.
Nama kelas
Jika anda ingin merujuk kepada kelas bersarang statik dari suatu tempat selain daripada kelas luarnya, anda perlu menentukan nama kelas, yang terdiri daripada nama kelas luar dan nama kelas bersarang. Berikut ialah rupa umum nama ini:
OuterClass.InnerClass
Contoh:
Kelas luar | Kelas bersarang | Nama penuh kelas bersarang |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Jika kelas bersarang mempunyai kelas bersarang sendiri, nama mereka hanya dicantumkan menggunakan titik.
Contoh biasa kelas bersarang dalam JDK ialah Entry
kelas di dalam Map
kelas. Jika anda ingin mendapatkan set pasangan nilai kunci yang disimpan dalam HashMap
objek, kemudian gunakan entrySet()
kaedah, yang mengembalikan a .Set<Map.Entry>
Perhatikan itu ialah contoh kelas luar dan kelas bersarang.Map.Entry
Mencipta objek
Sangat mudah untuk mencipta objek kelas bersarang statik. Begini rupanya:
OuterClass.NestedClass name = new OuterClass.NestedClass();
Semuanya sama seperti kelas biasa, tetapi namanya terdiri daripada dua bahagian.
Memanggil kaedah statik
Jika kelas statik mempunyai kaedah statik, anda boleh mengaksesnya dengan cara yang sama seperti kaedah statik kelas biasa (tetapi nama kelas akan terdiri daripada dua bahagian).
OuterClass.NestedClass.staticMethod();
Mengakses pembolehubah statik
Mengakses pembolehubah statik awam bagi kelas bersarang juga mudah:
OuterParent.NestedClass.nameOfStaticVariable
3. Ciri-ciri kelas statik
Kelas bersarang statik mempunyai sebab paling sedikit untuk dipanggil statik. Mereka berkelakuan seperti kelas biasa . Tiada sekatan untuk mengaksesnya daripada kaedah bukan statik.
Jika anda bekerja dengan kelas bersarang statik di dalam kelas luarnya, anda tidak akan melihat sebarang perbezaan daripada kelas yang paling biasa (tidak bersarang dan bukan statik).
Contoh:
Kelas mata bersarang statik | Kelas Mata Biasa. |
---|---|
|
|
Jika anda mengambil beberapa kelas bersarang statik dan mengalihkannya keluar dari kelas luarnya, satu-satunya perkara yang akan berubah ialah kelas baharu itu tidak lagi dapat mengakses private static
pembolehubah dan kaedah kelas luarnya yang dahulu.
Contoh:
Kelas mata bersarang statik | Kelas Mata Biasa. |
---|---|
|
|
Kaedah dalam kelas main
biasa tidak boleh mengakses pembolehubah kelas !Point
private static
points
Solution
Ini ialah perbezaan utama antara kelas bersarang statik dan kelas biasa. Kaedah kelas bersarang statik boleh mengakses semua pembolehubah statik dan kaedah kelas luarnya, walaupun ia diisytiharkan private
.
Dan jika anda memikirkannya, mengapa perlu mengejutkan? Pengubah private
suai secara eksplisit mengatakan bahawa pembolehubah dan kaedah yang ditandakan oleh pengubah ini hanya boleh diakses dari dalam kelas mereka. Adakah kelas bersarang statik di dalam kelas luarnya? Ya, jadi tiada masalah! Akses mereka sebanyak yang anda mahu.
GO TO FULL VERSION