ความแตกต่างระหว่างการโอเวอร์โหลด การสืบทอด การแทนที่ และความหลากหลาย:
1) การสืบทอดคือเมื่อคลาสย่อยได้รับสมาชิกของคลาสพาเรนต์
2) การเอาชนะเป็นวิธีการปรับใช้คลาสพาเรนต์ใหม่หลังจากการสืบทอด
3) การโอเวอร์โหลดเป็นชุดของวิธีการที่มีพารามิเตอร์ต่างกันและมีชื่อเดียวกันในคลาส
4) ความแตกต่างคือการหลีกเลี่ยงการโอเวอร์โหลดจำนวนมากในคลาสพาเรนต์ ซึ่งจะทำให้โค้ดบวมและยากต่อการบำรุงรักษา
ข้อความที่น่าสนใจที่ฉันเห็นบนอินเทอร์เน็ตคือ: การสืบทอดเป็นวิธีการสำหรับคลาสย่อยเพื่อใช้คลาสพาเรนต์ ในขณะที่ความหลากหลายเป็นวิธีการสำหรับคลาสพาเรนต์เพื่อใช้คลาสย่อย
ตัวอย่างต่อไปนี้รวมถึงการใช้งานทั้งสี่นี้:
คลาสสามเหลี่ยมขยายรูปร่าง {
สาธารณะ int getSides() {
กลับ 3;
-
-
คลาสสี่เหลี่ยมผืนผ้าขยายรูปร่าง {
สาธารณะ int getSides (int i) {
ส่งคืนฉัน;
-
-
รูปร่างคลาสสาธารณะ {
บูลีนสาธารณะ isSharp(){
กลับเป็นจริง;
-
สาธารณะ int getSides(){
กลับ 0;
-
int getSides สาธารณะ (สามเหลี่ยมไตร) {
กลับ 3;
-
สาธารณะ int getSides (สี่เหลี่ยมผืนผ้า rec) {
กลับ 4;
-
โมฆะคงที่สาธารณะ main (String [] args) {
สามเหลี่ยม tri = สามเหลี่ยมใหม่ ();
System.out.println("สามเหลี่ยมเป็นแบบมีคม?" + tri.isSharp());
รูปร่างรูปร่าง = สามเหลี่ยมใหม่ ();
System.out.println(“รูปร่างของฉันมี ” + shape.getSides() + ” ด้าน.”);
-
-
สีแดงคือโอเวอร์โหลด สีเขียวคือการเขียนทับ สีน้ำเงินคือมรดก สีชมพูคือความหลากหลาย
โปรดทราบว่าเมธอดของคลาส Triangle จะถูกแทนที่ ในขณะที่เมธอดของคลาส Triangle นั้นมีการใช้งานมากเกินไป
เมื่อเปรียบเทียบส่วนสีแดงและสีชมพู คุณจะพบข้อดีของความหลากหลายเหนือการโอเวอร์โหลด: หากคุณใช้การโอเวอร์โหลด วิธีการรับจำนวนขอบจะต้องโอเวอร์โหลดในคลาสพาเรนต์สำหรับแต่ละคลาสย่อย หากคุณใช้โพลีมอร์ฟิซึม ให้ใช้คลาสพาเรนต์ จัดเตรียมอินเทอร์เฟซสำหรับรับจำนวนด้านเท่านั้น สำหรับการได้รับจำนวนด้านของรูปร่างและวิธีการรับมันจะถูกนำไปใช้ (เขียนใหม่) ในคลาสย่อยตามลำดับ