Jaka jest różnica między przeciążaniem a zastępowaniem.
c#
inheritance
Kirill Kobelev
źródło
źródło
Odpowiedzi:
Przeciążenie
Przeciążanie ma miejsce, gdy masz wiele metod w tym samym zakresie, z tą samą nazwą, ale różnymi podpisami.
Nadrzędny
Przesłanianie to zasada, która umożliwia zmianę funkcjonalności metody w klasie podrzędnej.
źródło
void
zagetStuff
wtest2
getStuff(2, "Hello world!");
czy mogę to zrobićgetStuff("Myname", "Mysurname", "Hello World!");
? Czy ktoś może potwierdzić, że to sposób na zrobienie tego?Proste definicje przeciążania i zastępowania
Przeciążanie (polimorfizm czasu kompilacji) :: Funkcje o tej samej nazwie i różnych parametrach
Przesłanianie (polimorfizm czasu wykonywania) :: Funkcje w klasie rozszerzonej o takiej samej nazwie i takich samych parametrach jak w klasie bazowej, ale z różnymi zachowaniami.
źródło
Chcę podzielić się przykładem, który miał dla mnie dużo sensu, kiedy się uczyłem:
To tylko przykład, który nie obejmuje metody wirtualnej ani klasy bazowej. Żeby dać wskazówkę dotyczącą głównego pomysłu.
Załóżmy, że istnieje myjnia samochodowa, która ma funkcję „Myj” i akceptuje jako typ Samochód.
Pobiera dane wejściowe samochodu i myje samochód.
Przeładujmy funkcję Wash ()
Przeciążenie:
Funkcja mycia wcześniej tylko myła samochód, ale teraz jest przeciążona, aby umyć również ciężarówkę.
Zastąpmy funkcję Wash ()
Nadrzędny:
Funkcja mycia ma teraz warunek, aby sprawdzić, czy samochód jest już czysty i nie trzeba go ponownie myć.
Jeśli samochód jest czysty, po prostu go woskuj.
Jeśli nie jest czysty, najpierw umyj samochód, następnie wysusz go, a następnie woskuj
.
Więc funkcjonalność została zastąpiona przez dodanie nowej funkcjonalności lub zrobienie czegoś zupełnie innego.
źródło
Wnikliwy ankieter odpowiedziałby:
Jaka jest różnica między overriding a shadowing?
źródło
Jak powiedział Michael:
i
źródło
Posiadanie więcej niż jednej metody / konstruktora o tej samej nazwie, ale różnych parametrach nazywa się przeciążaniem. To jest zdarzenie czasu kompilacji.
O / p:
Zastępowanie jest zdarzeniem w czasie wykonywania, co oznacza, że na podstawie kodu dane wyjściowe zmieniają się w czasie wykonywania.
Zauważ, że w obu klasach istnieje wspólna metoda topSpeed (). Ponieważ utworzyliśmy instancję Ferrari, otrzymujemy inny wynik.
O / p:
źródło
w C # nie ma Java jak ukryte przesłonięcie, bez przesłaniania słowa kluczowego w metodzie przesłaniania! zobacz te implementacje C #:
wariant 1 bez nadpisania : wynik to 200
wariant 2 ze słowem kluczowym override : wynik to 400
słowo kluczowe wirtualne w klasie Car jest przeciwne dla finału w Javie, oznacza nie ostateczne , możesz nadpisać lub zaimplementować, jeśli Car był abstrakcyjny
źródło
shadowing = zachowuje dwie definicje w klasie pochodnej iw celu zaprojektowania definicji klasy bazowej przesłania (ukrywa) definicję klasy pochodnej i odwrotnie.
źródło
Kolejna kwestia do dodania.
Przeciążanie więcej niż jednej metody o tej samej nazwie. Ten sam lub inny typ zwrotu. Różne liczby parametrów lub inny typ parametrów. W tej samej klasie lub klasie pochodnej.
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)
Może być możliwe w tej samej klasie lub klasie pochodnej. Generalnie woli w tej samej klasie. Np. Console.WriteLine () ma 19 przeciążonych metod.
Potrafi przeciążać konstruktory klas, metody.
Można uznać za polimorfizm czasu kompilacji (statyczny / wczesne wiązanie).
==================================================== ==================================================== =
Zastępowanie nie może być możliwe w tej samej klasie. Może przesłonić metody klas, właściwości, indeksatory, zdarzenia.
Ma pewne ograniczenia, takie jak Przesłonięta metoda podstawowa musi być wirtualna, abstrakcyjna lub nadpisana. Nie można używać nowych, statycznych ani wirtualnych modyfikatorów do modyfikowania metody zastępowania.
Można rozważyć jako polimorfizm w czasie wykonywania (dynamiczny / późne wiązanie).
Pomaga w wersjonowaniu http://msdn.microsoft.com/en-us/library/6fawty39.aspx
==================================================== ==================================================== =
Przydatne linki
http://msdn.microsoft.com/en-us/library/ms173152.aspx Polimorfizm czasu kompilacji a polimorfizm czasu wykonywania
źródło
Przeciążanie jest częścią statycznego polimorfizmu i służy do implementacji innej metody o tej samej nazwie, ale różnych sygnaturach. Przesłanianie służy do zakończenia niepełnej metody. Moim zdaniem nie ma porównania między tymi dwoma pojęciami, jedyne, co jest podobne, to to, że oba mają to samo słownictwo, które się skończyło.
źródło
Przeciążanie metod i Nadpisywanie metod to dwie różne koncepcje. Przeciążanie metod ma tę samą nazwę metody, ale różne podpisy. Zastępowanie metody polega na zmianie domyślnej implementacji metody klasy bazowej w klasie pochodnej. Poniżej znajdziesz 2 doskonałe samouczki wideo wyjaśniające te pojęcia.
Metoda przesłaniająca ukrywanie Vs
Przeciążanie metod
źródło
Przeciążanie to koncepcja, w której masz te same sygnatury lub metody o tej samej nazwie, ale z różnymi parametrami i nadpisywaniem, mamy metody o tej samej nazwie z różnymi parametrami, które również mają dziedziczenie, czyli nadpisywanie.
źródło