1. แต่นั่นไม่ใช่ทั้งหมด
สมมติว่าCow
คลาสมีprintAll()
เมธอดที่เรียกใช้เมธอดอื่นอีกสองเมธอด จากนั้นรหัสจะทำงานดังนี้:
รหัส | คำอธิบาย |
---|---|
|
|
|
เอาต์พุตหน้าจอจะเป็น:
|
โปรดทราบว่าเมื่อมีการเรียกprintAll()
เมธอดใน คลาส บนอ็อบเจกต์ เมธอดของคลาสจะถูกใช้ ไม่ใช่เมธอดในเมธอดCow
Whale
printName
Whale
Cow
สิ่งสำคัญไม่ใช่คลาสที่เขียนเมธอด แต่เป็นประเภท (คลาส) ของอ็อบเจ็กต์ที่เรียกใช้เมธอด
เฉพาะเมธอดที่ไม่ใช่สแตติกเท่านั้นที่สามารถสืบทอดและแทนที่ได้ เมธอดสแตติกไม่ได้รับการสืบทอด ดังนั้นจึงไม่สามารถแทนที่ได้
นี่คือWhale
ลักษณะของคลาสหลังจากใช้การสืบทอดและวิธีการแทนที่:
|
นี่คือWhale ลักษณะของคลาสหลังจากใช้การสืบทอดและการแทนที่เมธอด: เราไม่รู้เกี่ยวกับprintName เมธอด เก่าใดๆ |
2. การพิมพ์
มีจุดที่น่าสนใจยิ่งกว่าที่นี่ เนื่องจากคลาสสืบทอดเมธอดและข้อมูลทั้งหมดของคลาสพาเรนต์ การอ้างอิงถึงออบเจกต์ของคลาสลูกสามารถเก็บไว้ใน (กำหนดให้กับ) ตัวแปรที่มีประเภทเดียวกับคลาสพาเรนต์ (และพาเรนต์ของพาเรนต์ เป็นต้น — ตลอดจนถึงObject
ชั้นเรียน) ตัวอย่าง:
รหัส | คำอธิบาย |
---|---|
|
เอาต์พุตหน้าจอจะเป็น:
|
|
เอาต์พุตหน้าจอจะเป็น:
|
|
เอาต์พุตหน้าจอจะเป็น:
วิธีการ นี้ toString() สืบทอดมาจากObject คลาส |
นี่เป็นทรัพย์สินที่มีค่ามาก หลังจากนั้นไม่นาน คุณจะเข้าใจวิธีใช้มันในทางปฏิบัติ
3. การเรียกใช้เมธอดบนวัตถุ
เมื่อมีการเรียกใช้เมธอดบนตัวแปร วิธีการนั้นจะถูกเรียกใช้บนออบเจกต์ กลไกนี้เรียกว่าการส่งเมธอดแบบไดนามิก
นี่คือลักษณะ:
รหัส | คำอธิบาย |
---|---|
|
เอาต์พุตหน้าจอจะเป็น:
|
|
เอาต์พุตหน้าจอจะเป็น:
|
โปรดทราบว่าการใช้งานเฉพาะของprintName()
เมธอดที่ได้รับการเรียก — หนึ่งในCow
หรือหนึ่งในWhale
คลาส — ไม่ได้ถูกกำหนดโดยประเภทของตัวแปร แต่โดยประเภทของวัตถุที่ตัวแปรอ้างถึง
ตัวแปรCow
เก็บการอ้างอิงถึงWhale
วัตถุ และprintName()
เมธอดที่กำหนดในWhale
คลาสคือสิ่งที่เรียกว่า
นี้ไม่ชัดเจนมาก จำกฎหลัก:
ชุดของเมธอดที่เรียกใช้ตัวแปรได้นั้นถูกกำหนดโดยประเภทของตัวแปร และการใช้งานเมธอดเฉพาะที่ได้รับการเรียกนั้นถูกกำหนดโดยประเภท/คลาสของออบเจกต์ที่อ้างถึงโดยตัวแปร
คุณจะพบสิ่งนี้ตลอดเวลา ดังนั้นยิ่งคุณจำสิ่งนี้ได้เร็วเท่าไหร่ก็ยิ่งดีเท่านั้น