ก่อนอื่นให้พูดคุยสั้น ๆ เกี่ยวกับคำจำกัดความของคุณสมบัติหลักสามประการ:
การห่อหุ้ม: ซ่อนคุณสมบัติและรายละเอียดการใช้งานของวัตถุจะเปิดเผยส่วนต่อประสานกับโลกภายนอกเท่านั้นและควบคุมระดับการเข้าถึงของการอ่านและแก้ไขคุณสมบัติในโปรแกรม การรวมข้อมูลที่เป็นนามธรรมและพฤติกรรม (หรือฟังก์ชั่น) เพื่อสร้างแบบอินทรีย์ทั้งหมดนั่นคือการรวมข้อมูลแบบอินทรีย์กับซอร์สโค้ดของข้อมูลการทำงานเพื่อสร้าง "คลาส" ซึ่งข้อมูลและฟังก์ชั่นเป็นสมาชิกของชั้นเรียน วัตถุประสงค์ของการห่อหุ้มคือเพื่อเพิ่มความปลอดภัยและทำให้การเขียนโปรแกรมง่ายขึ้น ผู้ใช้ไม่จำเป็นต้องเข้าใจรายละเอียดการใช้งานที่เฉพาะเจาะจง แต่เพียงใช้สมาชิกชั้นเรียนผ่านอินเทอร์เฟซภายนอกซึ่งเป็นสิทธิ์การเข้าถึงที่เฉพาะเจาะจง ข้อกำหนดพื้นฐานสำหรับการห่อหุ้มคือ: แปรรูปแอตทริบิวต์ทั้งหมดให้วิธีการ getter และ setter สำหรับแต่ละแอตทริบิวต์ หากมีตัวสร้างที่มีพารามิเตอร์คุณต้องเขียนตัวสร้างโดยไม่ต้องพารามิเตอร์ ในระหว่างการพัฒนาคุณมักจะต้องทดสอบชั้นเรียนที่เขียนแล้วดังนั้นบางครั้งคุณสามารถเขียนวิธี ToString ใหม่ได้ แต่ไม่จำเป็น
การสืบทอด: เปิดใช้งานรหัสนำกลับมาใช้ใหม่ผ่านการสืบทอด คลาสทั้งหมดใน Java นั้นได้มาจากการสืบทอดคลาส Java.lang.Object โดยตรงหรือโดยอ้อม คลาสที่สืบทอดมานั้นเรียกว่าคลาสย่อยและคลาสที่สืบทอดมานั้นเรียกว่าคลาสหลัก คลาสย่อยไม่สามารถสืบทอดตัวแปรและวิธีการของสมาชิกในชั้นพาเรนต์ที่ได้รับอนุญาตการเข้าถึงเป็นส่วนตัว คลาสย่อยสามารถแทนที่วิธีการของคลาสแม่และตัวแปรสมาชิกชื่อที่มีชื่อเดียวกับคลาสแม่ อย่างไรก็ตาม Java ไม่รองรับการสืบทอดหลายครั้งนั่นคือความสามารถของคลาสที่จะได้รับจาก superclasses หลาย ในการพัฒนาความสัมพันธ์การสืบทอดจะลดลงและสิ่งนี้ทำเพื่อลดระดับการมีเพศสัมพันธ์ของโปรแกรม
Polymorphism: polymorphism แบ่งออกเป็น polymorphism เวลาการออกแบบและ polymorphism run-time ตัวอย่างเช่นการโอเวอร์โหลดเรียกว่า polymorphism เวลาการออกแบบ สำหรับวิธีการแทนที่หรือการสืบทอดระบบรันไทม์ Java ตัดสินใจว่าวิธีการเรียกใช้ตามประเภทของอินสแตนซ์ที่เรียกวิธีการซึ่งเรียกว่า polymorphism รันไทม์ ในระยะสั้นลักษณะทั่วไปของการออกแบบเชิงวัตถุคือการสืบทอดการห่อหุ้มและ polymorphism ซึ่งเป็นกุญแจสู่ความนิยมของวัตถุที่มุ่งเน้น
บรรจุุภัณฑ์
ค่าเริ่มต้นของสิทธิ์การเข้าถึงสำหรับแอตทริบิวต์คลาสใน Java ไม่ใช่ส่วนตัว หากคุณต้องการซ่อนวิธีการของแอตทริบิวต์นี้คุณสามารถเพิ่มตัวดัดแปลงส่วนตัวเพื่อ จำกัด การเข้าถึงคลาสเท่านั้น
สำหรับแอตทริบิวต์ส่วนตัวในชั้นเรียนควรมีวิธีการ (getxxx, setxxx ()) เพื่อเข้าถึงแอตทริบิวต์ส่วนตัวเพื่อให้แน่ใจว่าการทำงานและความปลอดภัยของแอตทริบิวต์ส่วนตัว
การห่อหุ้มวิธีการเปิดเผยการเปิดเผยที่ซ่อนอยู่
มรดก Java
การสืบทอดคือการเป็นนามธรรมหลายประเภทของสิ่งต่าง ๆ ที่มีลักษณะทั่วไปในชั้นเรียนเดียว
การสืบทอดใน Java ต้องใช้คำหลักขยายและนิ้วกลางของ Java อนุญาตให้มรดกเดี่ยวนั่นคือคลาสสามารถมีคลาสหลักเดียวเท่านั้น
ตัวสร้างไม่สามารถสืบทอดได้
แทนที่ด้วยวิธี Java
เมื่อมีวิธีการในคลาสย่อยที่ส่งคืนรายการพารามิเตอร์เดียวกันเป็นชื่อเดียวกันกับที่สามารถเข้าถึงได้ในคลาสพาเรนต์วิธีการที่สืบทอดมาจากคลาสพาเรนต์จะถูกเขียนทับ
คำหลัก super ()
Super () หมายความว่าเมื่อตัวสร้างของคลาสย่อยเรียกตัวสร้างของคลาสแม่ Super () สามารถอยู่ในประโยคแรกของคอนสตรัคเตอร์เท่านั้น
ความหลากหลายในชวา
มีกลไก polymorphic สองกลไก: คอมไพล์เวลา polymorphism และ polymorphism run-time
1. วิธีการโอเวอร์โหลด: การโอเวอร์โหลดหมายถึงหลายวิธีที่มีชื่อเดียวกันในคลาสเดียวกัน แต่วิธีการเหล่านี้มีพารามิเตอร์ที่แตกต่างกัน ดังนั้นคุณสามารถกำหนดวิธีการโทรในเวลาคอมไพล์ซึ่งเป็น polymorphism คอมไพล์เวลา
2. วิธีการแทนที่: คลาสย่อยสามารถแทนที่วิธีการของคลาสแม่ดังนั้นวิธีเดียวกันจะมีอาการที่แตกต่างกันในคลาสหลักและคลาสย่อย ในภาษา Java ตัวแปรอ้างอิงของคลาสพื้นฐานสามารถชี้ไม่เพียง แต่ไปยังวัตถุอินสแตนซ์ของคลาสฐานเท่านั้น แต่ยังรวมถึงวัตถุอินสแตนซ์ของคลาสย่อยด้วย ในทำนองเดียวกันตัวแปรอ้างอิงในอินเทอร์เฟซยังสามารถชี้ไปที่วัตถุอินสแตนซ์ของคลาสการใช้งาน
คลาสสาธารณะ A {Public String Show (D OBJ) {return ("A และ D");} Public String Show (A OBJ) {return ("A และ A");}} คลาสสาธารณะ B ขยาย {public String show (b obj) {return ("b และ b"); B {} การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {a a1 = ใหม่ a (); a2 = ใหม่ b (); b b = new b (); c c = ใหม่ c (); d d = new d (); System.out.println ("1--" + a1.show (b)); system.out.println ("2--" + a1.show (c)); system.out.println ("3--" + a1.show (d)); system.out.out.println ("4--" + a2.show (b); a2.show (c)); system.out.println ("6--" + a2.show (d)); system.out.println ("7--" + b.show (b)); system.out.println ("8--" + b.show (c)); system.out.println ("9--" }} 1-A และ A2-A และ A3-A และ D4-B และ A5-B และ A6-A และ D7-B และ B8-B และ B9-A และ D เมื่อวัตถุ superclass อ้างถึงตัวแปรเพื่ออ้างถึงวัตถุ subclass ประเภทของวัตถุอ้างอิงมากกว่าประเภทของตัวแปรอ้างอิงกำหนดวิธีการสมาชิกที่เรียกว่า แต่วิธีที่เรียกว่าต้องกำหนดใน superclass นั่นคือวิธีที่ครอบคลุมโดยคลาสย่อย
มาใช้ตัวอย่างเพื่อแสดงความหมายของประโยคนี้: a2.show (b);
ที่นี่ A2 เป็นตัวแปรอ้างอิงของ Type A ซึ่งหมายถึงวัตถุ B ดังนั้นตามประโยคข้างต้นหมายความว่ามี B ในการตัดสินใจว่าจะโทรหาใครดังนั้น A2.Show (B) ควรเรียกแสดง (B OBJ) ใน B และผลลัพธ์ควรเป็น "B และ B" แต่ทำไมมันถึงแตกต่างจากผลการดำเนินการก่อนหน้านี้? ที่นี่เราเพิกเฉยต่อประโยคต่อไปนี้ "แต่วิธีที่เรียกว่าที่นี่จะต้องกำหนดไว้ใน superclass" ดังนั้นแสดง (b obj) อยู่ในคลาส A หรือไม่? มันไม่มีอยู่เลย! ดังนั้นประโยคนี้ไม่ได้ใช้ที่นี่? ประโยคนี้ผิดหรือเปล่า? เลขที่! ในความเป็นจริงประโยคนี้ยังหมายถึงประโยคนี้: มันยังคงต้องได้รับการยืนยันตามลำดับความสำคัญของวิธีการโทรในห่วงโซ่มรดก นั่นเป็นเหตุผลว่าทำไมจึงพบการแสดง (OBJ) ในชั้นเรียน A ในเวลาเดียวกันเนื่องจาก B แทนที่วิธีการมันเรียกวิธีการในคลาส B มิฉะนั้นวิธีการในคลาส A จะถูกเรียก
ข้างต้นคือความเข้าใจในสามคุณสมบัติที่สำคัญของการห่อหุ้ม Java การสืบทอดและความหลากหลายที่แนะนำให้คุณรู้จัก ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!