Apa perbedaan antara overloading dan overriding.
Apa perbedaan antara overloading dan overriding.
Jawaban:
Kelebihan beban
Overloading adalah saat Anda memiliki beberapa metode dalam cakupan yang sama, dengan nama yang sama tetapi tanda tangan berbeda.
//Overloading
public class test
{
public void getStuff(int id)
{}
public void getStuff(string name)
{}
}
Utama
Mengganti adalah prinsip yang memungkinkan Anda mengubah fungsionalitas metode di kelas anak.
//Overriding
public class test
{
public virtual void getStuff(int id)
{
//Get stuff default location
}
}
public class test2 : test
{
public override void getStuff(int id)
{
//base.getStuff(id);
//or - Get stuff new location
}
}
void
untuk getStuff
masuktest2
getStuff(2, "Hello world!");
atau saya bisa melakukan ini getStuff("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
public class A
{
public void print(int x, int y)
{
Console.WriteLine("Parent Method");
}
}
public class B : A
{
public void child()
{
Console.WriteLine("Child Method");
}
public void print(float x, float y)
{
Console.WriteLine("Overload child method");
}
}
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.
public class A
{
public virtual void print()
{
Console.WriteLine("Parent Method");
}
}
public class B : A
{
public void child()
{
Console.WriteLine("Child Method");
}
public override void print()
{
Console.WriteLine("Overriding child method");
}
}
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.
public void Wash(Car anyCar){
//wash the car
}
Mari membebani fungsi Wash ()
Beban berlebih:
public void Wash(Truck anyTruck){
//wash the Truck
}
Fungsi mencuci hanya untuk mencuci Mobil sebelumnya, tetapi sekarang kelebihan beban untuk mencuci Truk juga.
Mari kita timpa fungsi Wash ()
Utama:
public override void Wash(Car anyCar){
//check if the car has already cleaned
if(anyCar.Clean){
//wax the car
}
else{
//wash the car
//dry the car
//wax the car
}
}
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.
Pewawancara yang cerdik akan menindaklanjuti dengan:
Seperti yang dikatakan Michael:
dan
Memiliki lebih dari satu metode / konstruktor dengan nama yang sama tetapi parameter yang berbeda disebut overloading. Ini adalah acara waktu kompilasi.
Class Addition
{
int add(int a, int b)
{
return a+b;
}
int add(int a, int b, int c)
{
return a+b+c;
}
public static main (String[] args)
{
Addition addNum = new Addition();
System.out.println(addNum.add(1,2));
System.out.println(addNum.add(1,2,3));
}
}
O / p:
3
6
Mengganti adalah peristiwa waktu proses, yang berarti berdasarkan kode Anda, keluaran berubah pada waktu proses.
class Car
{
public int topSpeed()
{
return 200;
}
}
class Ferrari extends Car
{
public int topSpeed()
{
return 400;
}
public static void main(String args[])
{
Car car = new Ferrari();
int num= car.topSpeed();
System.out.println("Top speed for this car is: "+num);
}
}
Perhatikan ada metode umum di kedua kelas topSpeed (). Sejak kami menggunakan Ferrari, kami mendapatkan hasil yang berbeda.
O / p:
Top speed for this car is: 400
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
class Car {
public int topSpeed() {
return 200;
}
}
class Ferrari : Car {
public int topSpeed(){
return 400;
}
}
static void Main(string[] args){
Car car = new Ferrari();
int num= car.topSpeed();
Console.WriteLine("Top speed for this car is: "+num);
Console.ReadLine();
}
varian 2 dengan override keyword: hasilnya 400
class Car {
public virtual int topSpeed() {
return 200;
}
}
class Ferrari : Car {
public override int topSpeed(){
return 400;
}
}
static void Main(string[] args){
Car car = new Ferrari();
int num= car.topSpeed();
Console.WriteLine("Top speed for this car is: "+num);
Console.ReadLine();
}
Kata kunci virtual pada kelas Car kebalikan dari final di Java, artinya belum final , Anda bisa menimpa, atau mengimplementasikan jika Car itu abstrak
shadowing = mempertahankan dua definisi di kelas turunan dan untuk memproyeksikan definisi kelas dasar, ia membayangi (menyembunyikan) definisi kelas turunan dan sebaliknya.
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
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.
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.
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.