Run-Time Type Identification (RTTI) เป็นกลไกที่มีประโยชน์มากใน Java RTTI จะรักษาข้อมูลที่เกี่ยวข้องกับคลาสเมื่อ Java กำลังทำงาน
Polymorphism ถูกนำมาใช้ตาม RTTI ฟังก์ชั่นของ RTTI นั้นส่วนใหญ่ใช้งานโดยคลาสคลาส
คลาสเรียน
คลาสคลาสคือ "คลาสของคลาส" (คลาสของคลาส) ถ้าคลาสเป็นนามธรรมและคอลเลกชันของวัตถุ คลาสคลาสจะเป็นนามธรรมและคอลเลกชันของคลาส
แต่ละวัตถุคลาสแสดงถึงคลาสอื่น ตัวอย่างเช่น ในโปรแกรมต่อไปนี้ อ็อบเจ็กต์ c1 ของคลาส Class แสดงถึงคลาส Human และ c2 แสดงถึงคลาส Woman
คัดลอกรหัสรหัสดังต่อไปนี้:
การทดสอบในชั้นเรียนสาธารณะ
-
โมฆะสาธารณะคง main (String [] args)
-
Human aPerson = มนุษย์ใหม่ ();
คลาส c1 = aPerson.getClass();
System.out.println(c1.getName());
Human anotherPerson = ผู้หญิงใหม่ ();
คลาส c2 = anotherPerson.getClass();
System.out.println(c2.getName());
-
-
คลาสมนุษย์
-
-
*อุปกรณ์เสริม
-
สาธารณะ int getHeight()
-
กลับ this.height;
-
-
* มิวเทเตอร์
-
โมฆะสาธารณะ growHeight (int h)
-
this.height = this.height + h;
-
ความสูง int ส่วนตัว
-
ผู้หญิงชั้นขยายมนุษย์
-
-
* วิธีการใหม่
-
ให้มนุษย์สาธารณะ ()
-
System.out.println("ให้กำเนิด");
กลับ (มนุษย์ใหม่ ());
-
-
เมื่อเราเรียกใช้เมธอด getClass() ของอ็อบเจ็กต์ เราจะได้รับการอ้างอิงไปยังอ็อบเจ็กต์ Class ที่เกี่ยวข้อง
ใน c2 แม้ว่าเราจะแปลงการอ้างอิงของวัตถุ Women ไปเป็นการอ้างอิงของวัตถุ Human แต่วัตถุ Class ที่วัตถุนั้นชี้ไปก็ยังคงเป็น Woman
ทุกอ็อบเจ็กต์ใน Java มีอ็อบเจ็กต์ Class ที่สอดคล้องกัน ดังนั้น เราสามารถรู้คลาสที่เป็นของอ็อบเจ็กต์ "จริงๆ" ได้ตลอดเวลาผ่านอ็อบเจ็กต์ Class ไม่ว่าเราจะทำการแปลงประเภทใดกับการอ้างอิง อ็อบเจ็กต์คลาสที่สอดคล้องกับอ็อบเจ็กต์นั้นก็จะเหมือนกัน เมื่อเราเรียกเมธอดผ่านการอ้างอิง Java จะสามารถค้นหาเมธอดที่กำหนดไว้ในคลาส Class ที่ถูกต้องและรันโค้ดในคลาส Class ได้เสมอ เนื่องจากการมีอยู่ของคลาสอ็อบเจ็กต์ Java จะไม่สูญหายเนื่องจากประเภทอัปแคสต์ นี่คือหลักการของความหลากหลาย
getClass: ฉันเป็นใคร?
นอกจากเมธอด getClass() แล้ว เรายังมีวิธีอื่นในการเรียกอ็อบเจ็กต์ของคลาส Class
คัดลอกรหัสรหัสดังต่อไปนี้:
การทดสอบในชั้นเรียนสาธารณะ
-
โมฆะสาธารณะคง main (String [] args)
-
คลาส c3 = Class.forName("มนุษย์");
System.out.println(c1.getName());
คลาส c4 = Woman.class
System.out.println(c2.getName());
-
-
มีสองวิธีที่แสดงไว้ด้านบน:
1. เมธอด forName() รับสตริงเป็นพารามิเตอร์ซึ่งเป็นชื่อของคลาส สิ่งนี้จะส่งคืนวัตถุคลาสที่เกี่ยวข้อง
2. เมธอด Woman.class เรียกสมาชิกคลาสของคลาสโดยตรง สิ่งนี้จะส่งคืนวัตถุคลาสที่เกี่ยวข้อง
วิธีการเรียน
Class object บันทึกข้อมูลของคลาสที่เกี่ยวข้อง เช่น ชื่อของคลาส แพ็คเกจที่คลาสนั้นตั้งอยู่ เป็นต้น เราสามารถเรียกวิธีการที่เกี่ยวข้องได้ เช่น:
คัดลอกรหัสรหัสดังต่อไปนี้:
getName() ส่งคืนชื่อของคลาส
getPackage() ส่งคืนแพ็คเกจที่มีคลาสอยู่
คุณสามารถใช้เมธอด newInstance() ของออบเจ็กต์ Class เพื่อสร้างออบเจ็กต์ของคลาสที่เกี่ยวข้อง เช่น:
คัดลอกรหัสรหัสดังต่อไปนี้:
มนุษย์คนใหม่ = c1.newInstance();
newInstance() เรียกวิธีการสร้างเริ่มต้นโดยไม่มีพารามิเตอร์
เราสามารถรับสมาชิกของคำจำกัดความของคลาสได้:
คัดลอกรหัสรหัสดังต่อไปนี้:
getFields() ส่งคืนสมาชิกข้อมูลสาธารณะทั้งหมด
getMethods() ส่งคืนวิธีการสาธารณะทั้งหมด
สามารถใช้คลาสการวิเคราะห์การสะท้อนเพิ่มเติมได้ ไม่มีรายละเอียดเพิ่มเติมที่นี่
สำหรับวิธีการเพิ่มเติมของคลาส Class โปรดตรวจสอบเอกสารอย่างเป็นทางการ:
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html
กำลังโหลดคลาสคลาส
เมื่อ Java สร้างอ็อบเจ็กต์ของคลาสเฉพาะ เช่น อ็อบเจ็กต์คลาส Human Java จะตรวจสอบว่ามีอ็อบเจ็กต์ Class ที่เกี่ยวข้องในหน่วยความจำหรือไม่
หากไม่มีอ็อบเจ็กต์ Class ที่สอดคล้องกันในหน่วยความจำ Java จะค้นหาคำจำกัดความของคลาส Human ในไฟล์ .class และโหลดอ็อบเจ็กต์ Class ของคลาส Human
หลังจากที่โหลดอ็อบเจ็กต์ Class สำเร็จแล้ว การสร้างและการดำเนินการที่เกี่ยวข้องของอ็อบเจ็กต์ Human อื่นๆ จะอ้างอิงถึงอ็อบเจ็กต์ Class