Kami selalu mendefinisikan kelas untuk membuat objek. Objek adalah entitas dengan fungsionalitas, sedangkan kelas adalah tipe klasifikasi objek. Ini adalah konsep dasar berorientasi objek.
Dalam pewarisan, kami memperlakukan kelas sebagai subjek yang dapat diperluas, sehingga meningkatkan pemahaman kami tentang "kelas".
Masih banyak lagi yang perlu dibahas tentang kelas itu sendiri. Kami akan terus melakukan pendalaman
anggota data statis
Ada beberapa data yang digunakan untuk menyatakan keadaan kelas. Misalnya, di kelas Manusia, kita bisa menggunakan "populasi" untuk mewakili jumlah total objek di kelas Manusia. "Populasi" secara langsung menggambarkan keadaan suatu kelas, bukan suatu objek.
Kelas Manusia memiliki populasi 8 orang
Semua objek kelas berbagi data "populasi". Data seperti ini disebut data kelas anggota (class field).
Dalam definisi kelas, kita menggunakan kata kunci static untuk mendeklarasikan anggota data kelas, seperti:
Copy kode kodenya sebagai berikut:
kelasManusia
{
/**
* konstruktor
*/
Manusia publik (int h)
{
ini.tinggi = h;
}
/**
*aksesor
*/
publik int getHeight()
{
kembalikan ini.tinggi;
}
/**
* mutasi
*/
kekosongan publik tumbuhTinggi(int h)
{
ini.tinggi = ini.tinggi + h;
}
/**
*napas
*/
nafas kosong di depan umum()
{
System.out.println("hu...hu...");
}
tinggi int pribadi;
populasi int statis swasta;
boolean statis publik is_mammal = true;
}
Kami mendefinisikan dua anggota data kelas: populasi dan is_mamalia. Semua objek Manusia berbagi data populasi; atribut is_mammal (adalah mamalia) dari objek Manusia mana pun adalah benar.
Anggota data kelas juga perlu mengatur izin akses. Untuk data anggota kelas yang dinyatakan publik, dapat langsung diakses dari luar menggunakan class.field atau object.field (jika objek kelas ini ada). Kedua metode akses tersebut masuk akal karena anggota data kelas dapat dianggap sebagai atribut kelas dan dapat dianggap sebagai atribut yang dimiliki bersama oleh semua anggota. Jika suatu anggota data kelas didefinisikan sebagai pribadi, maka anggota data kelas tersebut hanya dapat diakses dari dalam kelas tersebut.
(Is_mammal disetel ke publik di atas hanya untuk demonstrasi. Ini cukup berbahaya. Jika seseorang menggunakan Human.is_mammal=false;, semua manusia akan menderita. Sekali lagi, prinsip dasarnya adalah menyetel data ke privasi sebanyak mungkin.)
metode statis
Kita juga dapat memiliki metode kelas, yaitu metode yang dideklarasikan sebagai statis. Metode kelas mewakili tindakan yang dapat diimplementasikan oleh suatu kelas, dan operasinya tidak melibatkan objek tertentu. Jika suatu metode dinyatakan statis, metode tersebut hanya dapat memanggil data dan metode statis, tetapi tidak dapat memanggil data dan metode non-statis.
Faktanya, dalam metode statis, tidak akan ada parameter this dan super yang diteruskan secara implisit. Kami tidak memiliki cara untuk mereferensikan data dan metode milik objek (yang persis seperti yang kami inginkan).
Berdasarkan apa yang telah dikatakan di atas, kami memiliki hubungan sebagai berikut:
Garis putus-putus merah menunjukkan tidak dapat diaksesnya. Dengan kata lain, data objek tidak dapat diakses dalam metode kelas.
Selanjutnya kita menambahkan metode statis getPopulation(), yang mengembalikan populasi data statis:
Copy kode kodenya sebagai berikut:
kelasManusia
{
/**
* konstruktor
*/
Manusia publik (int h)
{
ini.tinggi = h;
}
/**
*aksesor
*/
publik int getHeight()
{
kembalikan ini.tinggi;
}
/**
* mutasi
*/
kekosongan publik tumbuhTinggi(int h)
{
ini.tinggi = ini.tinggi + h;
}
/**
*napas
*/
nafas kosong di depan umum()
{
System.out.println("hu...hu...");
}
tinggi int pribadi;
/*
* metode statis, akses populasi
*/
getPopulasi int statis publik()
{
kembali Manusia.populasi;
}
populasi int statis swasta;
boolean statis pribadi is_mammal = true;
}
Saat memanggil metode kelas, kita bisa memanggilnya melalui kelas.metode() atau objek.metode(). Misalnya, gunakan tes kelas Tes berikut:
Copy kode kodenya sebagai berikut:
Tes kelas publik
{
public static void main(String[] args)
{
System.out.println(Manusia.getPopulation());
Manusia aPerson = Manusia baru(160);
Sistem.keluar.println(aPerson.getPopulation());
}
}
Kami memanggil metode kelas getPopulation() di luar definisi kelas dengan dua cara.
Metode objek mengubah data kelas
Kita melihat bahwa metode objek dapat mengakses data kelas. Ini adalah konsep yang sangat berguna. Keadaan suatu kelas dapat berubah seiring dengan perubahan objek. Misalnya, "populasi" harus bertambah 1 saat objek dibuat. Kita dapat memodifikasi data "populasi" kelas dalam metode objek. Kami mengakses anggota data kelas di konstruktor di bawah ini. Metode konstruksi di sini adalah metode non-statis, yaitu metode objek:
Copy kode kodenya sebagai berikut:
kelasManusia
{
/**
* konstruktor
*/
Manusia publik (int h)
{
ini.tinggi = h;
Populasi manusia = Populasi manusia + 1;
}
/**
*aksesor
*/
publik int getHeight()
{
kembalikan ini.tinggi;
}
/**
* mutasi
*/
kekosongan publik tumbuhTinggi(int h)
{
ini.tinggi = ini.tinggi + h;
}
/**
*napas
*/
nafas kosong di depan umum()
{
System.out.println("hu...hu...");
}
tinggi int pribadi;
/*
* metode statis, akses populasi
*/
getPopulasi int statis publik()
{
kembali Manusia.populasi;
}
populasi int statis swasta;
boolean statis pribadi is_mammal = true;
}
Setiap kali kita membuat objek, kita memodifikasi data kelas melalui metode konstruksi objek dan menambah data kelas populasi sebanyak 1. Dengan cara ini, populasi dapat mencerminkan jumlah total objek yang termasuk dalam kelas ini secara real time (Anda dapat membuat beberapa objek di Test dan kemudian mencetak Human.population).
Selain contoh konstruktor yang diberikan di atas, kita juga dapat mengakses data kelas dalam metode objek biasa.
terakhir
Arti dasar dari kata kunci terakhir adalah: Data/metode/kelas ini tidak dapat diubah.
1. Tipe data dasar akhir: nilai konstan, yang hanya dapat ditetapkan satu kali dan tidak dapat diubah lagi.
2.Metode terakhir: Metode ini tidak dapat ditimpa. Metode privat default ke metode final.
3.Kelas terakhir: Kelas ini tidak dapat diwarisi.
Objek bertipe biasa juga dapat memiliki kata kunci final yang artinya objek referensi (referensi) tidak dapat diubah lagi. Artinya, referensi hanya bisa menunjuk pada satu objek saja. Namun, konten objek bisa berubah (mirip dengan pointer statis di C). Kami akan membahas referensi objek nanti.
Jika tipe data dasar bersifat final dan statis, maka ia hanya menyimpan satu salinan dari nilai tetap. Ini bagus untuk menyimpan konstanta seperti pi.
Meringkaskan
bidang statis, metode statis
kelas.metode_statis()
terakhir