Apa perbedaan antara overloading dan overriding.
c#
inheritance
Kirill Kobelev
sumber
sumber
Jawaban:
Kelebihan beban
Overloading adalah saat Anda memiliki beberapa metode dalam cakupan yang sama, dengan nama yang sama tetapi tanda tangan berbeda.
Utama
Mengganti adalah prinsip yang memungkinkan Anda mengubah fungsionalitas metode di kelas anak.
sumber
void
untukgetStuff
masuktest2
getStuff(2, "Hello world!");
atau saya bisa melakukan inigetStuff("Myname", "Mysurname", "Hello World!");
? Adakah yang bisa memastikan ini adalah cara untuk melakukannya?Definisi sederhana untuk overloading dan override
Overloading (Compile Time Polymorphism) :: Berfungsi dengan nama yang sama dan parameter yang berbeda
Overriding (Run Time Polymorphism) :: Fungsi di kelas yang diperluas dengan nama yang sama dan parameter yang sama seperti di kelas dasar, tetapi dengan perilaku yang berbeda.
sumber
Saya ingin membagikan contoh yang sangat masuk akal bagi saya ketika saya belajar:
Ini hanyalah contoh yang tidak menyertakan metode virtual atau kelas dasar. Sekadar memberi petunjuk tentang gagasan utama.
Katakanlah ada mesin cuci Kendaraan dan memiliki fungsi yang disebut "Mencuci" dan menerima Mobil sebagai tipenya.
Mendapat masukan Mobil dan mencuci Mobil.
Mari membebani fungsi Wash ()
Beban berlebih:
Fungsi mencuci hanya untuk mencuci Mobil sebelumnya, tetapi sekarang kelebihan beban untuk mencuci Truk juga.
Mari kita timpa fungsi Wash ()
Utama:
Fungsi mencuci kini memiliki syarat untuk mengecek apakah Mobil sudah bersih dan tidak perlu dicuci lagi.
Jika Mobil bersih, maka cukup wax.
Jika tidak bersih, cuci mobil terlebih dahulu, keringkan, lalu wax
.
Jadi fungsinya telah diganti dengan menambahkan fungsionalitas baru atau melakukan sesuatu yang sama sekali berbeda.
sumber
Pewawancara yang cerdik akan menindaklanjuti dengan:
Apa perbedaan antara overriding dan shadowing?
sumber
Seperti yang dikatakan Michael:
dan
sumber
Memiliki lebih dari satu metode / konstruktor dengan nama yang sama tetapi parameter yang berbeda disebut overloading. Ini adalah acara waktu kompilasi.
O / p:
Mengganti adalah peristiwa waktu proses, yang berarti berdasarkan kode Anda, keluaran berubah pada waktu proses.
Perhatikan ada metode umum di kedua kelas topSpeed (). Sejak kami menggunakan Ferrari, kami mendapatkan hasil yang berbeda.
O / p:
sumber
di C # tidak ada Java seperti hidden override, tanpa kata kunci override pada metode overriding! lihat implementasi C # ini:
varian 1 tanpa override : hasilnya 200
varian 2 dengan override keyword: hasilnya 400
Kata kunci virtual pada kelas Car kebalikan dari final di Java, artinya belum final , Anda bisa menimpa, atau mengimplementasikan jika Car itu abstrak
sumber
shadowing = mempertahankan dua definisi di kelas turunan dan untuk memproyeksikan definisi kelas dasar, ia membayangi (menyembunyikan) definisi kelas turunan dan sebaliknya.
sumber
Hal lain untuk ditambahkan.
Overloading Lebih dari satu metode dengan nama yang sama. Jenis pengembalian yang sama atau berbeda. Tidak ada parameter yang berbeda atau jenis parameter yang berbeda. Di kelas yang sama atau kelas turunan.
int Add (int num1, int num2) int Add (int num1, int num2, int num3) double Add (int num1, int num2) double Add (double num1, double num2)
Bisa dimungkinkan di kelas yang sama atau kelas turunan. Umumnya lebih memilih di kelas yang sama. Misalnya Console.WriteLine () memiliki 19 metode kelebihan beban.
Dapat membebani konstruktor kelas, metode.
Dapat dianggap sebagai polimorfisme Waktu Kompilasi (statis / Pengikatan Awal).
================================================== ================================================== =
Penimpaan tidak dapat dilakukan di kelas yang sama. Dapat Mengganti metode kelas, properti, pengindeks, peristiwa.
Memiliki beberapa batasan seperti Metode dasar yang diganti harus virtual, abstrak, atau menimpa. Anda tidak dapat menggunakan pengubah baru, statis, atau virtual untuk mengubah metode penggantian.
Dapat Dianggap sebagai polimorfisme Run Time (Dynamic / Late Binding).
Membantu dalam pembuatan versi http://msdn.microsoft.com/en-us/library/6fawty39.aspx
================================================== ================================================== =
Tautan Bermanfaat
http://msdn.microsoft.com/en-us/library/ms173152.aspx Mengompilasi polimorfisme waktu vs. polimorfisme waktu proses
sumber
Overloading adalah bagian dari polimorfisme statis dan digunakan untuk mengimplementasikan metode berbeda dengan nama yang sama tetapi tanda tangan berbeda. Mengganti digunakan untuk menyelesaikan metode yang tidak lengkap. Menurut saya tidak ada perbandingan antara kedua konsep ini, satu-satunya hal yang mirip adalah keduanya hadir dengan kosakata yang sama yaitu berakhir.
sumber
Metode overloading dan Metode overriding adalah 2 konsep berbeda yang sama sekali berbeda. Metode overloading memiliki nama metode yang sama tetapi dengan tanda tangan yang berbeda. Penimpaan metode mengubah implementasi default metode kelas dasar di kelas turunan. Di bawah ini Anda dapat menemukan 2 video tutorial bagus yang menjelaskan konsep-konsep ini.
Metode mengganti penyembunyian Vs
Metode overloading
sumber
Overloading adalah konsep di mana Anda memiliki tanda tangan atau metode yang sama dengan nama yang sama tetapi parameter yang berbeda dan menimpa, kami memiliki metode nama yang sama dengan parameter berbeda juga memiliki warisan yang dikenal sebagai overriding.
sumber