แนวคิด: การสืบทอดหมายความว่าคำจำกัดความของคลาสสามารถขึ้นอยู่กับคลาสที่มีอยู่อื่นนั่นคือคลาสย่อยสืบทอดคลาสหลักซึ่งจะตระหนักถึงการใช้รหัสของคลาสแม่ ความสัมพันธ์ระหว่างสองคลาส: โดยทั่วไปคลาสแม่จะมีลักษณะทั่วไปของแต่ละคลาสย่อยในขณะที่คลาสย่อยสามารถเพิ่มวิธีการส่วนบุคคลเพิ่มเติมได้ การสืบทอดคลาสคือสกรรมกริยานั่นคือคลาสย่อยสามารถยังคงได้รับคลาสย่อยแนวคิดคลาสที่อยู่ในระดับบนเป็นนามธรรมมากขึ้นและแนวคิดของคลาสที่อยู่ในระดับล่างเป็นคอนกรีตมากขึ้น
1. กำหนดคลาสย่อย:
รูปแบบไวยากรณ์
[Modifier] ชื่อคลาสย่อยของคลาสขยายชื่อคลาสพาเรนต์ {
คลาสย่อย
-
Modifier: ค่าเริ่มต้นที่ได้รับการป้องกันแบบส่วนตัว
เนื้อหาย่อยเป็นเนื้อหาที่ไม่ซ้ำกันใหม่ที่เพิ่มเข้ามาโดย subclass ตามการสืบทอดเนื้อหาของคลาสแม่ อาจรวมถึงตัวแปรสมาชิก, วิธีการสมาชิก, คลาส, อินเทอร์เฟซ, วิธีการก่อสร้าง ฯลฯ
ตัวอย่างเช่นใน บริษัท พนักงานเป็นพนักงานที่ได้รับการว่าจ้างจาก บริษัท และผู้จัดการเป็นพนักงานพิเศษใน บริษัท จัดการ พนักงานพิเศษประเภทนี้ไม่เพียง แต่มีคุณลักษณะและวิธีการของพนักงานทั่วไปเท่านั้น แต่ยังรวมถึงคุณลักษณะและวิธีการบางอย่างของตนเองเช่นค่าเผื่อพิเศษ
รหัสมีดังนี้:
ชั้นเรียนสาธารณะ EmployeeClass {ชื่อสตริงส่วนตัว; // ชื่อ ID INT ส่วนตัว; // หมายเลข บริษัท เงินเดือนสองเท่าส่วนตัว; // เงินเดือนส่วนตัวแผนกสตริง; // แผนก Public EmployeeClass () {} พนักงานสาธารณะ (ชื่อสตริง, ID int, เงินเดือนสองครั้ง, แผนกสตริง) {this.name = ชื่อ; this.id = id; this.salary = เงินเดือน; this.department = แผนก; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } สาธารณะ int getId () {return id; } โมฆะสาธารณะ setId (int id) {this.id = id; } สาธารณะสองเท่า () {คืนเงินเดือน; } โมฆะสาธารณะ setSalary (เงินเดือนสองเท่า) {this.salary = เงินเดือน; } สตริงสาธารณะ getDepartment () {แผนกส่งคืน; } โมฆะสาธารณะ setDepartment (แผนกสตริง) {this.department = แผนก; } @Override สตริงสาธารณะ toString () {return "EmployeeClass [name =" + name + ", id =" + id + ", เงินเดือน =" + เงินเดือน + ", แผนก =" + แผนก + "]"; -นี่คือรหัสสำหรับคลาสพนักงานซึ่งมีคุณสมบัติสี่ชื่อชื่อหมายเลขเงินเดือนแผนก
ManagerClass ชั้นเรียนสาธารณะขยายพนักงาน {Private Double Specialsalary; Public ManagerClass () {super ();} public managerclass (ชื่อสตริง, ID int, เงินเดือนคู่, แผนกสตริง, พิเศษสองเท่า) {super (ชื่อ, id, เงินเดือน, แผนก, แผนก); this.specialsalary = specialsalary; } สาธารณะ double getSpecialsalary () {return specialsalary; } โมฆะสาธารณะ setSpecialSalary (double specialsalary) {this.specialsalary = specialsalary; } @Override สตริงสาธารณะ toString () {return super.toString () + "/specialsal:" + specialsalary; -นี่คือคลาสย่อยคลาสผู้จัดการที่มีคุณลักษณะของตัวเองเบี้ยเลี้ยงพิเศษ
2. การเข้าถึง subclass สำหรับสมาชิกชั้นเรียนผู้ปกครอง
คลาสย่อยสามารถสืบทอดสมาชิกของคลาสแม่ แต่การเข้าถึงสมาชิกของคลาสแม่ถูกควบคุมโดยคุณสมบัติการเข้าถึง
คลาสหลักและคลาสเด็กอยู่ในแพ็คเกจเดียวกัน: ไม่สามารถเข้าถึงส่วนตัวได้โดยตรง แต่เราสามารถรับสมาชิกส่วนตัวของคลาสแม่ด้วยวิธีการสมาชิกด้วยแอตทริบิวต์การเข้าถึงสาธารณะ
คลาสแม่และคลาสเด็กไม่ได้อยู่ในแพ็คเกจเดียวกัน: ไม่สามารถเข้าถึงส่วนตัวและค่าเริ่มต้นได้โดยตรง แต่เราสามารถรับสมาชิกส่วนตัวของคลาสแม่ผ่านวิธีการสมาชิกด้วยคุณสมบัติการเข้าถึงสาธารณะและการป้องกัน
3. การโอเวอร์โหลดและการเขียนทับของวิธีการสมาชิกในชั้นเรียน
เมื่อชื่อของตัวแปรสมาชิกใหม่ที่กำหนดไว้ในคลาสย่อยจะเหมือนกับตัวแปรสมาชิกในคลาสพาเรนต์คลาสย่อยจะซ่อนตัวแปรสมาชิกที่เกี่ยวข้องในคลาสพาเรนต์
การโอเวอร์โหลดหรือการแทนที่ของวิธีการสมาชิกเป็นวิธีการสมาชิกที่กำหนดไว้ในคลาสย่อยเมื่อชื่อของวิธีการสมาชิกที่กำหนดไว้ในคลาสพาเรนต์เหมือนกับชื่อของวิธีการสมาชิกในคลาสหลัก
(1) การโอเวอร์โหลดของวิธีการสมาชิก
ในพนักงานและผู้จัดการ Chestnut กล่าวถึงก่อนหน้านี้เราสามารถกำหนดวิธีการสมาชิกในชั้นเรียนพนักงาน
โมฆะสาธารณะ setinfo (ชื่อสตริง, ID int, เงินเดือนสองครั้ง, แผนกสตริง) {this.name = สตริงใหม่ (ชื่อ); this.id = id; this.salary = เงินเดือน; this.department = สตริงใหม่ (แผนก); -ในคลาสผู้จัดการสามารถกำหนดเป็น:
โมฆะสาธารณะ setinfo (ชื่อสตริง, ID int, เงินเดือนสองครั้ง, แผนกสตริง, สองพิเศษ) {super (ชื่อ, id, เงินเดือน, แผนก); this.specialsalary = specialsalary; -นี่คือวิธีการมากเกินไปของสมาชิก
(2) แทนที่วิธีการสมาชิก
มักจะมีสองรูปแบบ:
①ในวิธีการสมาชิกที่กำหนดโดย subclass ให้โทรวิธีการสมาชิกที่มีการแทนที่ในคลาสแม่แล้วเพิ่มคำสั่งการดำเนินการบางอย่าง
②ในวิธีการสมาชิกที่กำหนดโดย subclass วิธีการสมาชิกที่ถูกแทนที่โดยคลาสแม่จะไม่ถูกเรียก แต่กลุ่มคำสั่งถูกเขียนใหม่ สิ่งนี้ช่วยให้ครอบคลุมคลาสแม่อย่างเต็มรูปแบบ วิธีนี้ควรใช้งานเมื่อการดำเนินการของคลาสย่อยนั้นแตกต่างอย่างสิ้นเชิงจากการทำงานของวัตถุคลาสแม่
เกาลัด:
ในคลาสวัตถุมีวิธีการสมาชิกเท่ากับ () ที่กำหนดว่าวัตถุสองชิ้นมีค่าเท่ากันและรหัสของมันคือ:
บูลีนสาธารณะ Euqals (Object OBJ) {return (this == obj); -จะเห็นได้ว่าวิธีการสมาชิกนี้คือการเปรียบเทียบว่าวัตถุสองชิ้นอ้างถึงวัตถุหนึ่งในเวลาเดียวกันหรือไม่
แต่ตอนนี้เราหวังว่าจะใช้ฟังก์ชั่นที่เปรียบเทียบว่าเนื้อหาของวัตถุสองชิ้นในประเภทเดียวกันนั้นเท่ากันหรือไม่ ดังนั้นเราจึงมีคลาสพหูพจน์ด้านล่างชั้นพหูพจน์แต่ละชั้นประกอบด้วยส่วนจริงและส่วนจินตนาการ ฟังก์ชั่นการออกแบบสามารถเปรียบเทียบได้ว่าตัวเลขที่ซับซ้อนสองตัวเท่ากันหรือไม่ รหัสมีดังนี้:
Public Class ComplexNumber {Private Double Re; IM สองครั้งส่วนตัว; Public ComplexNumber () {re = 0.0; im = 0.0;} public ComplexNumber (double re, double im) {this.re = re; this.im = im; } สาธารณะ double getre () {return re; } โมฆะสาธารณะ setre (double re) {this.re = re; } สาธารณะ double getim () {return im; } โมฆะสาธารณะ setim (double im) {this.im = im; } บูลีนสาธารณะเท่ากับ (Object OtherObject) {ถ้า (this == otherObject) คืนค่าจริง; ถ้า (otherObject == null) ส่งคืนเท็จ; ถ้า (getClass ()! = otherObject.getClass ()) ส่งคืนเท็จ; ComplexNumber อื่น ๆ = (คอมเพล็กซ์หมายเลข) อื่น ๆ ; if ((re == other.re) && (im == อื่น ๆ other.im)) return true; อื่นกลับมาเป็นเท็จ } สตริงสาธารณะ toString () {string str = ""; if (re! = 0) str += re; ถ้า (im == 0) return str; ถ้า (IM <0) str += im +"i"; else str + = " +" + im + "i"; return str; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ComplexNumber C1, C2; c1 = new ComplexNumber (2,3); c2 = new ComplexNumber (2, -3.4); if (c1.equals (c2)) {system.out.println ("(" +c1 +") == (" +c2 +")"); } else {system.out.println ("(" +c1 +") <> (" +c2 +")"); -ผลลัพธ์คือ (2.0 + 3.0i) <> (2.0-3.4i)
ข้างต้นคือการอภิปรายสั้น ๆ เกี่ยวกับความเข้าใจหลักของ Java เกี่ยวกับการสืบทอดที่บรรณาธิการนำมาให้คุณ ฉันหวังว่าทุกคนจะสนับสนุน wulin.com เพิ่มเติม ~