Perbezaan antara mengatasi dan berlebihan

Perbezaan antara mengatasi dan berlebihan

Mengatasi vs overloading

Kaedah yang mengatasi dan melebih -lebihkan kaedah adalah dua konsep/teknik/ciri yang terdapat dalam beberapa bahasa pengaturcaraan. Kedua -dua konsep membolehkan pengaturcara menyediakan pelaksanaan yang berbeza untuk kaedah dengan nama yang sama. Kaedah Mengatasi membolehkan pengaturcara menyediakan pelaksanaan alternatif dalam kelas sub dengan kaedah yang telah ditakrifkan di dalam kelas supernya. Kaedah overloading membolehkan pengaturcara menyediakan pelaksanaan yang berbeza kepada pelbagai kaedah dengan nama yang sama (dalam kelas yang sama).

Apa yang mengatasi?

Seperti yang disebutkan di atas, kelas boleh memanjangkan kelas super atau kelas induk, dalam bahasa pengaturcaraan berorientasikan objek. Kelas kanak -kanak boleh mempunyai kaedah tersendiri atau boleh secara pilihan mempunyai pelaksanaannya sendiri untuk kaedah yang telah ditakrifkan dalam kelas induknya (atau salah satu kelas induknya). Oleh itu, apabila yang terakhir berlaku, ia dipanggil kaedah yang mengatasi. Dalam erti kata lain, jika kelas kanak -kanak menyediakan pelaksanaan kepada kaedah dengan tanda tangan dan jenis pulangan yang sama sebagai kaedah yang telah ditakrifkan dalam salah satu kelas induknya, kaedah itu dikatakan ditindih (diganti) oleh pelaksanaan kelas kanak -kanak. Oleh itu, jika terdapat kaedah yang ditindas dalam kelas, sistem runtime perlu menentukan pelaksanaan kaedah mana yang digunakan. Isu ini diselesaikan dengan melihat jenis objek yang tepat yang digunakan untuk memanggilnya. Sekiranya objek kelas induk digunakan untuk menggunakan kaedah yang ditindas, maka pelaksanaan dalam kelas induk digunakan. Begitu juga, jika ia merupakan objek kelas kanak -kanak yang digunakan, maka pelaksanaan kelas anak digunakan. Bahasa pengaturcaraan moden seperti Java, Eifell, C ++ dan Python membolehkan kaedah mengatasi.

Apa yang berlebihan?

Kaedah overloading adalah ciri yang disediakan oleh beberapa bahasa pengaturcaraan untuk membuat lebih daripada satu kaedah dengan nama yang sama, tetapi dengan jenis input dan output yang berbeza. Dalam bahasa pengaturcaraan moden seperti Java, C#, C ++ dan VB.Bersih, ciri ini ada. Anda boleh membebankan kaedah dengan membuat kaedah lain dengan nama yang sama tetapi dengan tanda tangan yang berbeza atau jenis pulangan yang berbeza (atau kedua -duanya). Sebagai contoh, jika anda mempunyai kaedah1 (Type1 T1) dan Method1 (Type2 T2) di dalam kelas yang sama, maka mereka terlalu banyak. Maka sistem itu harus memutuskan mana yang akan dilaksanakan ketika dipanggil. Pembezaan ini dibuat dengan melihat jenis parameter (s) telah diserahkan kepada kaedah. Sekiranya hujah adalah Type1, maka pelaksanaan pertama dipanggil, sementara jika ia adalah Type2, maka pelaksanaan kedua dipanggil.

Apakah perbezaan antara mengatasi dan berlebihan?

Walaupun, kaedah yang mengatasi dan kaedah beban digunakan untuk menyediakan kaedah dengan pelaksanaan yang berbeza, terdapat perbezaan utama antara kedua -dua konsep/teknik ini. Pertama sekali, subjek kaedah yang mengatasi selalu berada dalam kelas yang berbeza, sementara subjek kaedah overloading tinggal di dalam kelas yang sama. Ini bermakna utama hanya mungkin dalam bahasa pengaturcaraan berorientasikan objek yang membolehkan warisan, sementara beban boleh didapati dalam bahasa yang tidak berorientasikan objek juga. Dengan kata lain, anda mengatasi kaedah dalam kelas super tetapi anda membebankan kaedah dalam kelas anda sendiri.

Perbezaan lain ialah kaedah yang ditindas mempunyai nama kaedah yang sama, tandatangan kaedah dan jenis pulangan, tetapi kaedah yang berlebihan mesti berbeza sama ada tandatangan atau jenis pulangan (nama harus sama). Untuk membezakan antara dua kaedah yang ditindas, jenis objek tepat yang digunakan untuk menggunakan id kaedah yang digunakan, sedangkan untuk membezakan antara dua kaedah yang terlalu banyak jenis parameter digunakan. Satu lagi perbezaan utama ialah beban yang berlebihan diselesaikan pada masa penyusunan, sementara mengatasi masalah diselesaikan semasa runtime.