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