JavaRush /Blog Java /Random-MS /Mengapakah pewarisan antara muka diperlukan?

Mengapakah pewarisan antara muka diperlukan?

Diterbitkan dalam kumpulan
Mengapa antara muka diperlukan? Mengapakah pewarisan antara muka diperlukan? Mengapakah polimorfisme diperlukan? Bagi mereka yang membaca dan memahami cara melakukan warisan antara muka, tetapi tidak faham mengapa. Kali terakhir, menggunakan contoh keluarga Ivanov biasa, kami melihat mengapa antara muka diperlukan. Kami terus mendigitalkan keluarga yang bermasalah. Setiap orang mempunyai beberapa tabiat yang tidak diwarisi daripada sesiapa atau tidak diwariskan kepada sesiapa - tabiat peribadinya. Tugas kami adalah untuk menyediakan setiap ahli keluarga dengan tabiat yang unik. Mari kita beralih ke satah Java: kita perlu melaksanakan kaedah unik dalam kelas yang akan menjadi milik kelas ini sahaja. Nah, teruskan! Ini ialah Petya:
class Петя implements ПривычкиПапы, ПривычкиМамы {

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

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

@Override
public void поджимать () {
System.out.println("Поджать губки");
    }
}
Ini ayah:
class Папа implements ПривычкиПапы {

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

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

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

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Sempurna! Semuanya berfungsi sebagaimana mestinya! Dalam artikel pertama, dikatakan bahawa program itu mencerminkan dunia sebenar. Harta realiti yang paling menarik ialah ia berubah sepanjang masa. Keluarga Ivanov tidak terkecuali; mereka mempunyai seorang anak perempuan manis bernama Masha. Dan dia mewarisi tabiat mengelap bulu mata daripada Ibu dan menghidu daripada Ayah. Kita perlu membuat perubahan pada program kita. Mengapakah pewarisan antara muka diperlukan?  - 1Ayuh, ia tidak begitu sukar, perkara utama adalah berfikir secara logik. Lagipun, semua orang tahu mengapa antara muka diperlukan. Sekarang mari kita cipta antara muka untuk Masha's Habits , terangkan kaedah clapElashes() dan squish() di sana , laksanakan kepada Masha dan kami selesai. Jadi bagaimana jika kaedah dengan nama yang sama sudah dilaksanakan dalam antara muka lain, anda boleh melakukannya sekali. Mengapakah pewarisan antara muka diperlukan?  - 2Memang, siapa tahu rancangan apa yang keluarga Ivanov ada, jika Seryozha dilahirkan , siapa yang akan mewarisi tabiat daripada Ayah, Ibu, Kakek dan orang lain dari generasi keempat, setiap kali mencipta antara muka, seperti: antara muka Tabiat Seryozha , dan di sana mengisytiharkan kaedah yang sudah boleh diisytiharkan ratusan kali dalam antara muka lain? Dalam beberapa atau tiga generasi kita berisiko mendapat antara muka dengan sekumpulan kaedah yang sama yang telah diterangkan dalam antara muka lain, dan jika kita perlu menukar nama beberapa tabiat (dan ini agak mungkin - selepas semua, dunia sedang berubah) , kemudian bagaimana untuk memikirkan spageti ini, saya tidak dapat saya bayangkan. Yang tinggal hanyalah duduk dan mengimpikan keajaiban. Mengapakah pewarisan antara muka diperlukan?  - 3Sekarang, jika setiap tabiat mempunyai antara muka sendiri. Mari bayangkan:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
Dan kemudian, seperti dalam Lego, kita boleh, menggunakan pelbagai warisan daripada tabiat individu, menaip antara muka yang kita perlukan untuk tabiat ahli individu dalam keluarga. Sesuatu seperti ini:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
Dan kemudian hanya melaksanakan antara muka yang diingini ke kelas yang dikehendaki, sebagai contoh, Ibu:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Perkara yang sama boleh dilakukan dengan Papa, Petya dan Masha . Dan kemudian, dengan pengembangan keluarga Ivanov, tidak akan ada masalah dengan tabiat, kami hanya akan mengocoknya melalui warisan di peringkat antara muka, seperti bahan-bahan dalam salad, dan tidak akan menghasilkan banyak kaedah dengan nama yang sama. Eh, mimpi, mimpi... Mengapakah pewarisan antara muka diperlukan?  - 4Lelaki yang dilukis itu betul, ini sebenarnya mungkin - kini simulasi keluarga Ivanov telah diselamatkan! Pembaca yang penuh perhatian mungkin bertanya soalan: "Mengapa membuat antara muka untuk setiap ahli keluarga? Kami mempunyai satu set tindakan - segera melaksanakannya untuk kelas yang diperlukan." Mari kita bayangkan bahawa dalam banyak dunia selari terdapat beregu Petya , dan semua Petya perlu melaksanakan antara muka Tabiat Petya
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
Bagaimana jika tiada antara muka biasa?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
Ini menghasilkan kod yang lebih berulang. Warisan antara muka menjadikan aplikasi lebih fleksibel untuk diubah, khususnya, masalah dengan kaedah berulang dapat diselesaikan. Sila ambil perhatian sekali lagi bahawa pewarisan berbilang antara muka dibenarkan.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION