มรดก Java
มรดกเป็นรากฐานที่สำคัญของเทคโนโลยีการเขียนโปรแกรม Java object-oriented เพราะมันช่วยให้การสร้างการเรียนระดับลำดับชั้น มรดกสามารถเข้าใจได้เป็นวัตถุที่จะได้รับคุณสมบัติจากวัตถุของกระบวนการอื่น
หากผู้ปกครองชั้นเป็นระดับชั้น B, คลาส B และ C ชั้นเป็นระดับผู้ปกครองและเรายังโทร C เป็น subclass ของ A, Class C จากชั้นเรียนคือการสืบทอด ใน Java ชั้นมรดกมรดกเดียวที่เป็นคลาสย่อยสามารถมีได้เพียงหนึ่งระดับผู้ปกครอง
สองใช้กันมากที่สุดคำหลักที่เป็นมรดกและขยายการดำเนินการ
ทั้งในการใช้คำหลักและตรวจสอบว่าวัตถุเป็นวัตถุก็คือ-A (ก) ความสัมพันธ์
โดยใช้ทั้งสองคำหลักที่เราสามารถบรรลุวัตถุที่จะได้รับคุณสมบัติของวัตถุอื่น
ทั้งหมดเรียน Java ได้รับมาโดยชั้น java.lang.Object ดังนั้นวัตถุชั้นเป็นบรรพบุรุษของคนทุกชนชั้นและในวัตถุนอกจากนี้ทุกชั้นจะต้องมีระดับผู้ปกครอง
โดยมากกว่าขยายคำหลักที่สามารถประกาศสืบทอดชั้นจากชั้นเรียนอีกรูปแบบทั่วไปเป็นดังนี้:
// A.java public class A { private int i; protected int j; public void func() { } } // B.java public class B extends A { }
ดังกล่าวข้างต้นแสดงให้เห็นว่าข้อมูลโค้ดรหัส, B สืบทอดจาก A, B เป็น subclass ของ A. และ A เป็น subclass ของวัตถุที่มีอาจจะไม่ได้ประกาศอย่างชัดเจน
เป็นตัวอย่างซับคลาส B ของมีทั้งหมดตัวแปรสมาชิก แต่สำหรับสมาชิกของตัวแปร B ส่วนตัว แต่ไม่สามารถเข้าถึงซึ่งรับประกันการห่อหุ้มของ AIS-ความสัมพันธ์
ที่เป็น-A: วัตถุคือการจัดหมวดหมู่วัตถุอื่น
นี่เป็นคำสำคัญขยายการดำเนินการรับมรดก
public class Animal{ } public class Mammal extends Animal{ } public class Reptile extends Animal{ } public class Dog extends Mammal{ }
อ้างอิงจากตัวอย่างข้างต้นคำสั่งต่อไปนี้เป็นจริง:
- ชั้นสัตว์เป็นผู้ปกครองระดับชั้นเลี้ยงลูกด้วยนม
- ชั้นสัตว์เป็นผู้ปกครองระดับชั้นสัตว์เลื้อยคลาน
- เลี้ยงลูกด้วยนมและสัตว์เลื้อยคลานระดับเป็น subclass ของชั้นสัตว์
- ระดับสุนัขเป็นทั้ง subclass ของคลาสเลี้ยงลูกด้วยนมเป็น subclass ของชั้นสัตว์
วิเคราะห์ IS-ความสัมพันธ์ในตัวอย่างข้างต้นดังต่อไปนี้:
- เลี้ยงลูกด้วยนม IS-สัตว์
- สัตว์เลื้อยคลาน IS-สัตว์
- สุนัข IS-เลี้ยงลูกด้วยนม
ดังนั้น: สุนัข IS-สัตว์
โดยใช้คำหลักขยาย subclasses สืบทอดทุกวิธีการเรียนผู้ปกครองและคุณสมบัติ แต่ไม่สามารถใช้วิธีการส่วนตัว (ส่วนตัว) และคุณสมบัติ
เราใช้ตัวดำเนินการ instanceof สามารถกำหนดเลี้ยงลูกด้วยนม IS-สัตว์
ตัวอย่าง
public class Dog extends Mammal{ public static void main(String args[]){ Animal a = new Animal(); Mammal m = new Mammal(); Dog d = new Dog(); System.out.println(m instanceof Animal); System.out.println(d instanceof Mammal); System.out.println(d instanceof Animal); } }
ตัวอย่างข้างต้นรวบรวมผลมีดังนี้
true true true
หลังจากที่แนะนำขยายคำหลักที่เราจะดูที่วิธีการใช้คำหลักที่ดำเนินการเพื่อระบุ IS-ความสัมพันธ์
คำหลักในการดำเนินการในกรณีของอินเตอร์เฟซชั้นมรดกสถานการณ์เช่นนี้ไม่สามารถใช้คำขยาย
ตัวอย่าง
public interface Animal {} public class Mammal implements Animal{ } public class Dog extends Mammal{ }
คำหลัก instanceof
คุณสามารถใช้ประกอบการ instanceof เพื่อทดสอบว่าเลี้ยงลูกด้วยนมและวัตถุสุนัขเป็นตัวอย่างของสัตว์ชั้น
interface Animal{} class Mammal implements Animal{} public class Dog extends Mammal{ public static void main(String args[]){ Mammal m = new Mammal(); Dog d = new Dog(); System.out.println(m instanceof Animal); System.out.println(d instanceof Mammal); System.out.println(d instanceof Animal); } }
ตัวอย่างข้างต้นรวบรวมผลมีดังนี้
true true true
HAS-ความสัมพันธ์
HAS-A ความร่วมมือในนามของชั้นเรียนและสมาชิก นี้จะช่วยให้เพื่อนำมาใช้รหัสและลดข้อผิดพลาดรหัส
ตัวอย่าง
public class Vehicle{} public class Speed{} public class Van extends Vehicle{ private Speed sp; }
รถตู้ชั้นและชั้นความเร็วเป็น HAS-ความสัมพันธ์ (Van มีความเร็ว) ดังนั้นคุณจะไม่ได้มีโค้ดทั้งหมดจะถูกวางลงไปในระดับความเร็วรถตู้ในชั้นเรียนและระดับความเร็วอาจนำกลับมาใช้ในการใช้งานหลาย ๆ
ในลักษณะเชิงวัตถุผู้ใช้ไม่จำเป็นต้องกังวลเกี่ยวกับวิธีการเรียนภายใน
รถตู้รายละเอียดการใช้งานคลาสซ่อนจากผู้ใช้เพื่อให้ผู้ใช้เพียง แต่ต้องรู้วิธีที่จะเรียกรถตู้ให้เสร็จสมบูรณ์ระดับฟังก์ชั่นบางอย่างโดยไม่ต้องรู้แวนชั้นจะทำเองหรือโทรชั้นอื่น ๆ ที่จะทำผลงาน
Java สนับสนุนเฉพาะมรดกเดียวหมายความว่าชั้นไม่สามารถสืบทอดหลายชั้นเรียน
การปฏิบัติดังต่อไปนี้ไม่ได้ตามกฎหมาย:
public class extends Animal, Mammal{}
Java สนับสนุนเฉพาะมรดกเดียว (มรดกและชั้นฐานนามธรรม) แต่เราสามารถใช้อินเตอร์เฟซในการดำเนินการ (การเชื่อมต่อหลายมรดกเพื่อให้บรรลุ) โครงสร้างสคริปต์เช่น:
public class Apple extends Fruit implements Fruit1, Fruit2{}
โดยทั่วไปเราจะรับช่วงชั้นฐานและระดับนามธรรมกับขยายคำหลักที่ดำเนินการติดต่อกับมรดกการดำเนินการระดับคำหลัก