นี้
จะต้องมีบางสิ่งบางอย่างเพื่อแสดงวัตถุปัจจุบันของคลาส เช่นเดียวกับตัวชี้นี้ใน C ++ คำหลักนี้ใน Java แสดงถึงการอ้างอิงไปยังวัตถุปัจจุบัน
มันมีสามฟังก์ชั่นหลัก:
1. โทรหาตัวสร้างอื่น ๆ ในตัวสร้าง
ตัวอย่างเช่นมีชั้นเรียนนักเรียนที่มีสามคอนสตรัคเตอร์ หากคุณเรียกคอนสตรัคเตอร์อื่นในคอนสตรัคเตอร์บางตัวจำเป็นต้องมี () และเป็นไปไม่ได้ที่จะใช้นักเรียน () โดยตรง
2. ส่งคืนการอ้างอิงไปยังวัตถุปัจจุบัน
3. แยกแยะระหว่างชื่อตัวแปรสมาชิกและชื่อพารามิเตอร์
ดูตัวอย่างต่อไปนี้:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริงส่วนตัว; อายุ int ส่วนตัว; วิทยาลัยสตริงส่วนตัว; นักเรียนสาธารณะ () {อายุ = 20; } นักเรียนสาธารณะ (ชื่อสตริง) {this (); // ไม่สามารถโทรหานักเรียนใช้วิธีนี้ () this.name = ชื่อ; System.out.println ("ชื่อนักเรียนนี้คือ"+ชื่อ); } นักเรียนสาธารณะ (ชื่อสตริง, String College) {ชื่อนี้ (ชื่อ); // C ++ คุณสามารถโทรหาคอนสตรัคเตอร์อื่น ๆ โดยตรง this.college = วิทยาลัย; System.out.println ("ชื่อนักเรียนนี้คือ"+name+"วิทยาลัยคือ"+วิทยาลัย); } การอัพเกรดนักเรียนสาธารณะ () {อายุ ++; คืนสิ่งนี้; } public void print () {system.out.println ("ชื่อคือ:"+name+"อายุคือ:"+อายุ+"วิทยาลัยคือ:"+วิทยาลัย); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {นักเรียนนักเรียน 1 = นักเรียนใหม่ ("linc"); นักเรียนนักเรียน 2 = นักเรียนใหม่ ("Linc", "วิทยาลัย Shenyang"); student2.upgrade (). พิมพ์ (); -เมื่อคุณหลงทางในมหาสมุทรอันกว้างใหญ่ของวัตถุอย่าลืมใช้สิ่งนี้เพื่อค้นหาตัวเอง
สุดยอด
Super คือพ่อคนนี้ จากมุมมองของวัตถุใบหน้าแนวคิดทั้งสองนี้เข้าใจง่าย
คลาสย่อยนั้นสืบทอดมาจากคลาสหลัก คุณสมบัติและวิธีการที่ได้รับการปกป้องและสูงกว่าของคลาสแม่เกิดมาพร้อมกับคลาสย่อย แล้วทำไมคุณยังต้องการคำหลัก Super?
ก่อนอื่นให้ดูที่การสร้างชั้นเรียนหลัก เมื่อสร้างคลาสย่อยคุณต้องเรียกตัวสร้างเริ่มต้นของคลาสแม่ซึ่งสอดคล้องกับคุณสมบัติการก่อสร้างของ C ++ เมื่อคลาสแม่มีตัวสร้างหลายตัวคุณต้องระบุว่าจะโทรไป สิ่งนี้ต้องใช้ super (arg1, arg2 ... )
ควรสังเกตว่าเมื่อเรียกตัวสร้างคลาสพื้นฐานในตัวสร้างของคลาสย่อยซูเปอร์จะต้องเขียนเป็นครั้งแรกมิฉะนั้นจะมีการรายงานข้อผิดพลาด
ประการที่สองเรียกวิธีนี้ของคลาสแม่ในบางวิธีที่ subclass เขียนทับคลาสแม่ อย่างที่เราทราบกันดีว่าวิธีการบางอย่างของการเขียนทับคลาสแม่ในคลาสย่อยเป็นวิธีการ polymorphism เชิงทิศทางในวัตถุที่มุ่งเน้นและด้วยเหตุผลอื่น ๆ อีกมากมายวิธีการของคลาสแม่ต้องเรียกในวิธีนี้เพื่อแยกแยะความแตกต่าง ในเวลานี้จำเป็นต้องใช้ซุปเปอร์เพื่อให้เสร็จสมบูรณ์
ชั้นเรียนสาธารณะชั้นเรียนขยายนักเรียน {หน้าที่สตริงส่วนตัว; public classleader () {duty = "class monitor"; } public classleader (หน้าที่สตริง, ชื่อสตริง, String College) {super (ชื่อ, วิทยาลัย); this.duty = หน้าที่; } public void print () {super.print (); System.out.println ("หน้าที่คือ" + หน้าที่); } โมฆะคงที่สาธารณะหลัก (String [] args) {classleader leader = new classleader ("Life", "Linc", "Shenyang"); leader.print (); -วางไฟล์คลาสสองไฟล์ในไดเรกทอรีเดียวกันรวบรวมและเรียกใช้:
D:/Workspace/Java/Project261/Super> Java -D *java d:/workspace/java/project261/super> java classleader
ผลการทำงาน:
ชื่อนักเรียนนี้คือ linc ชื่อนักเรียนนี้คือ Linc College คือชื่อ Shenyang คือ: Linc Age คือ: 20 College คือ: Shenyang Duty คือ Life
ดูว่ามีการจัดการในภาษาอื่นอย่างไร:
C# ให้คำหลักพื้นฐานเพื่อให้ฟังก์ชั่นที่คล้ายกับ Super และ C ++ เรียกโดยตรงด้วยชื่อของคลาสพื้นฐาน