JavaRush /Blog Java /Random-MS /Amalan menggunakan polimorfisme

Amalan menggunakan polimorfisme

Diterbitkan dalam kumpulan
hello! Hari ini kita sedang menamatkan siri kuliah tentang prinsip OOP . Dalam pelajaran ini kita akan bercakap tentang polimorfisme. Amalan menggunakan polimorfisme - 1Polimorfisme ialah keupayaan untuk merawat pelbagai jenis seolah-olah mereka adalah jenis yang sama. Dalam kes ini, tingkah laku objek akan berbeza bergantung pada jenis objek tersebut. Mari kita lihat kenyataan ini dengan lebih terperinci. Mari kita mulakan dengan bahagian pertama: "keupayaan untuk bekerja dengan pelbagai jenis seolah-olah mereka adalah jenis yang sama." Bagaimanakah jenis yang berbeza boleh menjadi satu dan sama? Bunyinya agak pelik :/ Ia sebenarnya mudah. Sebagai contoh, keadaan ini timbul dengan penggunaan pusaka biasa. Mari lihat bagaimana ia berfungsi. Katakan kita mempunyai kelas induk yang mudah Catdengan satu kaedah run()- “run”:
public class Cat {

   public void run() {
       System.out.println("Бег!");
   }
}
Sekarang mari kita cipta tiga kelas yang diwarisi daripada Cat: Lion, Tigerdan Cheetah, menandakan singa, harimau dan cheetah.
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Лев бежит со speedю 80 км/ч");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Тигр бежит со speedю 60 км/ч");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Гепард бежит со speedю до 120 км/ч");
   }
}
Jadi kami ada 3 kelas. Mari kita simulasi situasi di mana kita boleh bekerja dengan mereka seolah-olah mereka adalah kelas yang sama. Cuba kita bayangkan seekor kucing kita sedang sakit dan memerlukan bantuan Dr Aibolit. Mari cuba buat kelas Aibolityang boleh merawat singa, harimau dan cheetah.
public class Aibolit {

   public void healLion(Lion lion) {

       System.out.println("Лев здоров!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Тигр здоров!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Гепард здоров!");
   }
}
Nampaknya masalah itu telah diselesaikan - kelas telah ditulis dan sedia untuk digunakan. Tetapi apa yang akan kita lakukan jika kita ingin mengembangkan program kita? Kini kami hanya mempunyai 3 spesies: singa, harimau, dan cheetah. Tetapi terdapat lebih daripada 40 spesies kucing di dunia. Bayangkan apa yang akan berlaku jika kita menambah pada program kelas berasingan untuk kucing Pallas, jaguar, Maine coon, kucing domestik dan semua orang lain. Amalan menggunakan polimorfisme - 2Program itu sendiri, sudah tentu, akan berfungsi, tetapi kelas Aibolitperlu sentiasa menambah kaedah baru untuk merawat setiap jenis kucing, dan akibatnya ia akan berkembang kepada saiz yang tidak pernah berlaku sebelum ini. Di sinilah sifat polimorfisme berperanan - "keupayaan untuk bekerja dengan beberapa jenis seolah-olah mereka adalah jenis yang sama." Kita tidak perlu mencipta banyak kaedah yang akan melakukan perkara yang sama - merawat kucing. Satu kaedah akan mencukupi untuk semua kes sekaligus:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
   }
}
healCat()Kita boleh menghantar kedua-dua objek Liondan Tigerobjek kepada kaedah Cheetah- semuanya adalah Cat:
public class Main {

   public static void main(String[] args) {

       Aibolit aibolit = new Aibolit();

       Lion simba = new Lion();
       Tiger sherekhan = new Tiger();
       Cheetah chester = new Cheetah();

       aibolit.healCat(simba);
       aibolit.healCat(sherekhan);
       aibolit.healCat(chester);
   }
}
Output konsol:

Пациент здоров!
Пациент здоров!
Пациент здоров!
Inilah cara kelas kami Айболитboleh berfungsi dengan jenis yang berbeza seolah-olah mereka adalah jenis yang sama. Sekarang mari kita berurusan dengan bahagian kedua: "dalam kes ini, tingkah laku objek akan berbeza bergantung pada jenis objek itu." Semuanya mudah di sini juga. Secara semula jadi, semua kucing berjalan secara berbeza. Sekurang-kurangnya, kelajuan larian mereka berbeza. Di antara tiga haiwan peliharaan kami, cheetah adalah yang terpantas, manakala harimau dan singa berlari lebih perlahan. Maksudnya, perangai mereka berbeza. Polimorfisme bukan sahaja memberi kita keupayaan untuk menggunakan pelbagai jenis sebagai satu. Pada masa yang sama, ia membolehkan kita tidak melupakan perbezaan mereka dan mengekalkan tingkah laku khusus untuk setiap daripada mereka. Ini boleh difahami dengan contoh ini. Katakan selepas pemulihan yang berjaya, kucing kami memutuskan untuk berlari-lari kecil untuk meraikannya. Mari tambahkan ini ke kelas kami Aibolit:
public class Aibolit {

   public void healCat(Cat cat) {

       System.out.println("Пациент здоров!");
       cat.run();
   }
}
Mari cuba jalankan kod yang sama untuk merawat tiga haiwan:
public static void main(String[] args) {

   Aibolit aibolit = new Aibolit();

   Lion simba = new Lion();
   Tiger sherekhan = new Tiger();
   Cheetah chester = new Cheetah();

   aibolit.healCat(simba);
   aibolit.healCat(sherekhan);
   aibolit.healCat(chester);
}
Dan inilah hasilnya:

Пациент здоров!
Лев бежит со speedю 80 км/ч
Пациент здоров!
Тигр бежит со speedю 60 км/ч
Пациент здоров!
Гепард бежит со speedю до 120 км/ч
Di sini kita melihat dengan jelas bahawa tingkah laku khusus objek kita telah dipelihara, walaupun kita menyerahkan ketiga-tiga haiwan ke dalam satu kaedah, "mengerti" setiap satu daripadanya kepada Cat. Terima kasih kepada polimorfisme, Java dengan sempurna mengingati bahawa ini bukan hanya tiga kucing, tetapi iaitu singa, harimau dan cheetah, yang berjalan secara berbeza. Ini adalah kelebihan utama menggunakan polimorfisme - fleksibiliti . Apabila kita perlu mencipta beberapa fungsi yang biasa kepada banyak jenis, singa, harimau dan cheetah hanya bertukar menjadi "kucing". Semua haiwan adalah berbeza, tetapi dalam beberapa situasi - kucing adalah kucing, tidak kira spesies mana pun ia tergolong :) Berikut ialah pengesahan video untuk anda.
Apabila "pengertian" ini tidak diperlukan, dan sebaliknya kita memerlukan tingkah laku spesies yang berbeza, setiap jenis berkelakuan berbeza. Terima kasih kepada polimorfisme, anda mencipta antara muka tunggal (set kaedah) untuk pelbagai kelas. Disebabkan ini, kerumitan program dikurangkan. Walaupun kami mengembangkan program kepada 40 jenis kucing, kami masih mempunyai antara muka yang paling mudah - satu kaedah run()untuk semua 40 kucing.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION