Run-Time Type Identification (RTTI) adalah mekanisme yang sangat berguna di Java. RTTI memelihara informasi terkait kelas saat Java sedang berjalan.
Polimorfisme diimplementasikan berdasarkan RTTI. Fungsi RTTI terutama dilaksanakan oleh kelas Kelas.
Kelas kelas
Kelas kelas adalah “kelas dari kelas” (kelas dari kelas). Jika suatu kelas merupakan abstraksi dan kumpulan objek, maka kelas Kelas merupakan abstraksi dan kumpulan kelas.
Setiap objek Kelas mewakili kelas lain. Misalnya, dalam program berikut, objek c1 dari kelas Kelas mewakili kelas Manusia, dan c2 mewakili kelas Wanita.
Copy kode kodenya sebagai berikut:
Tes kelas publik
{
public static void main(String[] args)
{
Manusia aPerson = Manusia baru();
Kelas c1 = aPerson.getClass();
Sistem.keluar.println(c1.getName());
Manusia Orang lain = Wanita baru();
Kelas c2 = anotherPerson.getClass();
Sistem.keluar.println(c2.getName());
}
}
kelasManusia
{
/**
*aksesor
*/
publik int getHeight()
{
kembalikan ini.tinggi;
}
/**
* mutasi
*/
kekosongan publik tumbuhTinggi(int h)
{
ini.tinggi = ini.tinggi + h;
}
tinggi int pribadi;
}
kelas Wanita memperluas Manusia
{
/**
* metode baru
*/
kelahiran manusia publik()
{
System.out.println("Melahirkan");
kembali (Manusia baru());
}
}
Ketika kita memanggil metode getClass() dari objek tersebut, kita mendapatkan referensi ke objek Kelas yang sesuai.
Di c2, meskipun kita mengubah referensi objek Women menjadi referensi objek Human, objek Class yang ditunjuk oleh objek tersebut tetaplah Woman.
Setiap objek di Java memiliki objek Kelas yang sesuai. Oleh karena itu, kita dapat mengetahui kelas di mana suatu objek "sebenarnya" berada kapan saja melalui objek Kelas. Apa pun jenis konversi yang kita lakukan pada referensi, objek Kelas yang bersesuaian dengan objek itu sendiri adalah sama. Saat kita memanggil suatu metode melalui referensi, Java selalu dapat menemukan metode yang ditentukan di kelas Class yang benar dan mengeksekusi kode di kelas Class tersebut. Karena adanya objek Kelas, Java tidak akan hilang karena tipe upcasting. Ini adalah prinsip polimorfisme.
getClass: Siapa saya?
Selain metode getClass(), kami memiliki cara lain untuk memanggil objek kelas Class.
Copy kode kodenya sebagai berikut:
Tes kelas publik
{
public static void main(String[] args)
{
Kelas c3 = Kelas.forName("Manusia");
Sistem.keluar.println(c1.getName());
Kelas c4 = Wanita.kelas
Sistem.keluar.println(c2.getName());
}
}
Ada dua cara yang ditunjukkan di atas:
1. Metode forName() menerima string sebagai parameter, yang merupakan nama kelas. Ini akan mengembalikan objek Kelas yang sesuai.
2. Metode Woman.class secara langsung memanggil anggota kelas dari kelas tersebut. Ini akan mengembalikan objek Kelas yang sesuai.
Metode kelas
Objek Kelas mencatat informasi kelas terkait, seperti nama kelas, paket di mana kelas tersebut berada, dll. Kita dapat memanggil metode yang sesuai, seperti:
Copy kode kodenya sebagai berikut:
getName() mengembalikan nama kelas
getPackage() mengembalikan paket tempat kelas berada
Anda dapat menggunakan metode newInstance() pada objek Kelas untuk membuat objek dari kelas terkait, seperti:
Copy kode kodenya sebagai berikut:
Manusia newPerson = c1.newInstance();
newInstance() memanggil metode build default tanpa parameter.
Kita bisa mendapatkan definisi anggota kelas:
Copy kode kodenya sebagai berikut:
getFields() mengembalikan semua anggota data publik
getMethods() mengembalikan semua metode publik
Kelas analisis refleksi dapat digunakan lebih lanjut. Tidak ada rincian lebih lanjut di sini.
Untuk metode kelas Kelas lainnya, silakan periksa dokumentasi resmi:
http://docs.Oracle.com/javase/1.5.0/docs/api/java/lang/Class.html
Pemuatan kelas kelas
Ketika Java membuat objek kelas tertentu, seperti objek kelas Manusia, Java memeriksa apakah ada objek Kelas yang sesuai di memori.
Jika tidak ada objek Kelas yang sesuai di memori, Java akan mencari definisi kelas Manusia di file .class dan memuat objek Kelas dari kelas Manusia.
Setelah objek Kelas berhasil dimuat, pembuatan dan operasi terkait objek Manusia lainnya akan merujuk ke objek Kelas.