JavaRush /จาวาบล็อก /Random-TH /เหตุใดการสืบทอดอินเทอร์เฟซจึงมีความจำเป็น
Павел
ระดับ

เหตุใดการสืบทอดอินเทอร์เฟซจึงมีความจำเป็น

เผยแพร่ในกลุ่ม
เหตุใดจึงต้องมีอินเทอร์เฟซ? เหตุใดการสืบทอดอินเทอร์เฟซจึงมีความจำเป็น เหตุใดจึงจำเป็นต้องมีความหลากหลาย? สำหรับผู้ที่อ่านและเข้าใจวิธีการสืบทอดอินเทอร์เฟซ แต่ไม่เข้าใจว่าทำไม ครั้งล่าสุดโดยใช้ตัวอย่างของตระกูล Ivanov ธรรมดาเราดูว่าเหตุใดจึงจำเป็นต้องมีอินเทอร์เฟซ เรายังคงเปลี่ยนครอบครัวที่มีปัญหาให้เป็นดิจิทัลต่อไป ทุกคนมีนิสัยบางอย่างที่เขาไม่ได้รับจากใครหรือไม่ได้ส่งต่อให้ใครเลย - นิสัยส่วนตัวของเขา หน้าที่ของเราคือสร้างนิสัยที่เป็นเอกลักษณ์ให้กับสมาชิกครอบครัวแต่ละคน มาดูระนาบ Java กัน: เราจำเป็นต้องใช้วิธีการเฉพาะในคลาสที่จะเป็นของคลาสเหล่านี้เท่านั้น เอาล่ะไปข้างหน้า! นี่คือ Petya:
class Петя implements ПривычкиПапы, ПривычкиМамы {

//это личные Петины привычки
public void ковырятьВНосу () {
System.out.println("Ковырь-ковырь");
    }

//это унаследованные привычки
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать () {
System.out.println("Поджать губки");
    }
}
นี่คือพ่อ:
class Папа implements ПривычкиПапы {

//это личные Папины привычки
public void чесатьБороду () {
System.out.println("Чешу бороду");
    }

//это переданные привычки
   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}
นี่คือแม่:
class Мама implements ПривычкиМамы{

//это личные Мамины привычки
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
สมบูรณ์แบบ! ทุกอย่างทำงานได้ตามที่ควรจะเป็น! ในบทความแรกว่ากันว่ารายการนี้เป็นภาพสะท้อนของโลกแห่งความเป็นจริง คุณสมบัติที่น่าสนใจที่สุดของความเป็นจริงก็คือมันเปลี่ยนแปลงตลอดเวลา ครอบครัว Ivanov ก็ไม่มีข้อยกเว้นพวกเขามีลูกสาวที่น่ารักชื่อ Masha และเธอสืบทอดนิสัยชอบปัดขนตาจากแม่และดมกลิ่นจากพ่อ เราจำเป็นต้องทำการเปลี่ยนแปลงโปรแกรมของเรา เหตุใดการสืบทอดอินเทอร์เฟซจึงมีความจำเป็น  - 1เอาน่า มันไม่ใช่เรื่องยาก สิ่งสำคัญคือการคิดอย่างมีเหตุผล ท้ายที่สุดแล้ว ทุกคนรู้ดีว่าเหตุใดจึงต้องมีอินเทอร์เฟซ ตอนนี้เรามาสร้างอินเทอร์เฟซ Masha's Habitsอธิบาย วิธี clapElashes()และsquish() ที่นั่น นำไปใช้กับMashaแล้วเราก็เสร็จแล้ว จะเป็นอย่างไรหากมีการใช้วิธีการที่มีชื่อเดียวกันในอินเทอร์เฟซอื่นแล้ว คุณสามารถทำได้เพียงครั้งเดียว เหตุใดการสืบทอดอินเทอร์เฟซจึงมีความจำเป็น  - 2ใครจะรู้ว่าตระกูล Ivanov มีแผนอะไรถ้าSeryozha เกิด ใครจะสืบทอดนิสัยจากพ่อ, แม่, ปู่ทวดและคนอื่น ๆ จากรุ่นที่สี่ในแต่ละครั้งที่สร้างอินเทอร์เฟซเช่น: อินเทอร์เฟซนิสัยของ Seryozhaและที่นั่น ประกาศวิธีการที่สามารถประกาศได้หลายร้อยครั้งในอินเทอร์เฟซอื่น ๆ หรือไม่? ในอีกสองสามชั่วอายุคน เราเสี่ยงที่จะได้รับอินเทอร์เฟซด้วยวิธีการที่เหมือนกันมากมายที่ได้อธิบายไว้แล้วในอินเทอร์เฟซอื่น ๆ และหากเราจำเป็นต้องเปลี่ยนชื่อของนิสัยบางอย่าง (และนี่ค่อนข้างเป็นไปได้ - เพราะโลกกำลังเปลี่ยนแปลง) แล้วจะคิดสปาเก็ตตี้นี้ได้อย่างไรฉันนึกภาพไม่ออก สิ่งที่เหลืออยู่คือการนั่งฝันถึงปาฏิหาริย์ เหตุใดการสืบทอดอินเทอร์เฟซจึงมีความจำเป็น  - 3ทีนี้ถ้าแต่ละนิสัยมีส่วนต่อประสานเป็นของตัวเอง ลองจินตนาการ:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
จากนั้น เช่นเดียวกับในเลโก้ เราสามารถใช้มรดกหลายรายการจากนิสัยของแต่ละบุคคล พิมพ์อินเทอร์เฟซที่เราต้องการสำหรับนิสัยของสมาชิกแต่ละคนในครอบครัว บางสิ่งเช่นนี้:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
จากนั้นเพียงใช้อินเทอร์เฟซที่ต้องการกับคลาสที่ต้องการ เช่น Mom:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
เช่นเดียวกันกับPapa, Petya และ Masha . จากนั้น ด้วยการขยายตัวของครอบครัว Ivanov จะไม่มีปัญหาเรื่องนิสัย เราจะสับเปลี่ยนนิสัยเหล่านั้นผ่านการสืบทอดที่ระดับอินเทอร์เฟซ เช่น ส่วนผสมในสลัด และจะไม่สร้างวิธีการมากมายที่มีชื่อเดียวกัน เอ๊ะ ความฝัน ความฝัน... เหตุใดการสืบทอดอินเทอร์เฟซจึงมีความจำเป็น  - 4ผู้ชายที่วาดนั้นถูกต้อง เป็นไปได้จริง ๆ - ตอนนี้การจำลองครอบครัว Ivanov ได้รับการช่วยเหลือแล้ว! ผู้อ่านที่สนใจอาจถามคำถาม: “เหตุใดจึงต้องสร้างอินเทอร์เฟซสำหรับสมาชิกในครอบครัวแต่ละคน เรามีชุดของการดำเนินการ - นำไปใช้กับคลาสที่ต้องการทันที” ลองจินตนาการว่าในโลกคู่ขนานหลายแห่งมีPetya เป็น สองเท่า และPetya ทั้งหมด จำเป็นต้องใช้อินเทอร์เฟซ Petya's Habits
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
จะเกิดอะไรขึ้นถ้าไม่มีอินเทอร์เฟซทั่วไป?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
ส่งผลให้โค้ดซ้ำกันมากขึ้น การสืบทอดอินเทอร์เฟซทำให้แอปพลิเคชันมีความยืดหยุ่นในการเปลี่ยนแปลงมากขึ้น โดยเฉพาะปัญหาเกี่ยวกับวิธีการทำซ้ำสามารถแก้ไขได้ โปรดทราบอีกครั้งว่าอนุญาตให้มีการสืบทอดอินเทอร์เฟซได้หลายครั้ง
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION