1. ปลาวาฬและวัว

นี่คือข้อเท็จจริงทางสัตววิทยาที่น่าสนใจ: วัวอยู่ใกล้วาฬมากกว่าฮิปโปโปเตมัส ปรากฎว่าวัวและปลาวาฬเป็นญาติสนิทกัน

ดูนี่. มาบอกคุณเกี่ยวกับความหลากหลาย - เครื่องมือที่ทรงพลังอีกอย่างของOOP มีคุณสมบัติสี่ประการ


2. มรดกไม่ใช่ยาครอบจักรวาล

ลองนึกภาพว่าคุณเขียนCowคลาสสำหรับเกม มีหลายฟิลด์และวิธีการ วัตถุในชั้นนี้สามารถทำสิ่งต่างๆ ได้: เดิน กิน และนอน วัวยังสวมกระดิ่งที่ส่งเสียงเมื่อพวกมันเดิน สมมติว่าคุณได้ดำเนินการทุกอย่างในชั้นเรียนจนถึงรายละเอียดที่เล็กที่สุด

จากนั้นลูกค้าของคุณก็มาบอกว่าเธอต้องการออกเกมระดับใหม่ ซึ่งการกระทำทั้งหมดจะเกิดขึ้นในทะเล และตัวละครหลักคือปลาวาฬ

คุณเริ่มออกแบบWhaleชั้นเรียนและตระหนักว่ามันแตกต่างจากCowชั้นเรียน เพียงเล็กน้อย ตรรกะของทั้งสองคลาสคล้ายกันมากและคุณตัดสินใจใช้การสืบทอด

ความหลากหลายใน Java

คลาส นี้Cowเหมาะสำหรับการรับบทบาทของคลาสพาเรนต์: มันมีตัวแปรและวิธีการที่จำเป็นทั้งหมด สิ่งที่เราต้องทำคือให้วาฬสามารถว่ายน้ำได้ แต่มีปัญหา: วาฬของคุณมีขา มีเขา และมีกระดิ่ง ท้ายที่สุดแล้ว ฟังก์ชันนี้ถูกนำมาใช้ในCowชั้นเรียน ทำอะไรได้บ้างที่นี่?

ความหลากหลายใน Java  มรดก

3. วิธีการเอาชนะ

วิธีการเอาชนะมาช่วยเรา หากเราสืบทอดเมธอดที่ไม่ได้ทำตามที่เราต้องการในคลาสใหม่ เราสามารถแทนที่เมธอดนั้นด้วยเมธอดอื่น

วิธีการเอาชนะ

สิ่งนี้ทำได้อย่างไร? ในคลาสที่สืบทอดมา เราประกาศเมธอดเดียวกันกับเมธอดของคลาสพาเรนต์ที่เราต้องการแทนที่ เราเขียนโค้ดใหม่ลงไป แค่นั้น — เหมือนกับว่าเมธอดเก่าในคลาสพาเรนต์ไม่มีอยู่จริง

นี่คือวิธีการทำงาน:

รหัส คำอธิบาย
class Cow
{
   public void printColor ()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a cow");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
  • มีการกำหนดคลาสสองคลาสที่นี่ - CowและWhale
  • WhaleสืบทอดCow
  • คลาสWhaleแทนที่printName()เมธอด
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
รหัสนี้แสดงข้อความต่อไปนี้บนหน้าจอ:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
รหัสนี้แสดงสิ่งต่อไปนี้บนหน้าจอ:
I'm a whale

หลังจากสืบทอดCowคลาสและแทนที่เมธอดแล้วprintNameคลาสWhaleจะมีข้อมูลและเมธอดต่อไปนี้จริง ๆ

class Whale
{
   public void printColor()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
เราไม่รู้เกี่ยวกับวิธีเก่าๆ