Wprowadzenie do przeciążania i przesłonięcia w Javie

Przyjrzyjmy się najpierw temu, co sugeruje nazwa na pierwszy rzut oka. „Przeciążenie” oznacza: nałożenie dodatkowego obciążenia na czyjąś oryginalną funkcjonalność, prawda? Natomiast „zastąpienie” oznacza: zapewnienie nowej funkcjonalności oprócz oryginalnej funkcjonalności każdego użytkownika. W tym artykule przyjrzymy się szczegółowo Przeciążeniu i Przesłonięciu w Javie. Tak, również w Javie, są one realizowane w ten sam sposób programowo. Rzućmy okiem na to jeden po drugim.

Przeciążenie w Javie

Gdy klasa Java ma wiele metod o tej samej nazwie, ale z różnymi argumentami, nazywamy to Przeciążanie metod. Utrzymując tę ​​samą nazwę, zwiększamy tylko czytelność kodu programu. Załóżmy na przykład, że musimy wykonać operację dodawania dla niektórych podanych liczb. Powiedzmy, że nazwa naszej metody to „add ()”. Tutaj można dodać dwie liczby, trzy liczby lub więcej. Dlatego w zależności od tego, ile liczb będzie wymagało dodatkowej operacji, możemy zmienić argumenty (lub parametry) funkcji. Ale zamiast tego, jeśli napiszesz różne metody dla różnej liczby argumentów, trudno będzie je rozpoznać, ponieważ nazwa będzie inna. Dlatego poprzez przeciążenie osiągamy lepszą czytelność naszego kodu. Pytanie brzmi: w jaki sposób osiągniemy przeciążenie?

Spójrzmy na te po kolei z przykładowymi kodami.

Metoda nr 1 - Poprzez modyfikację liczby parametrów

Więc tutaj wykonamy operację dodawania na niektórych liczbach. W tym celu stwórzmy klasę o nazwie „AdditionalOperation”. Wewnątrz tej klasy zastosujmy dwie metody o nazwie „add ()”. W jednej z tych metod dodamy dwie liczby. W drugim przypadku dodamy trzy liczby. Osiągniemy to, zmieniając liczbę parametrów w tych metodach, ale zachowamy nazwę bez zmian. W ten sposób przeciążamy tutaj metodę „add ()”.

Kod:

public class AdditionOperation (
static int addition(int num1, int num2)(return num1+num2;) //function declarationand definition for addition of two numbers
static int addition(int num1, int num2, int num3)(return num1+num2+num3;) //function declarationand definition for addition of three numbers
public static void main(String args()) (
system.out.printin(addition(35, 36)); //method overloading
system.out.printin(addition(35, 36, 37)); //method overloading, we are calling same methods but for different number of arguments.
)
)

Wynik:

Metoda nr 2 - Poprzez modyfikację typu danych

Więc tutaj wykonamy operację dodawania na różnych typach, na przykład między typem całkowitym a między typem podwójnym. W tym celu stwórzmy klasę o nazwie „AdditionalOperation”. Wewnątrz tej klasy zastosujmy dwie metody o nazwie „add ()”. W jednej z tych metod dodamy dwie liczby całkowite. W drugim przypadku dodamy dwa podwójne. Osiągniemy to, zmieniając typ parametrów w tych metodach, ale zachowamy nazwę bez zmian. W ten sposób przeciążamy tutaj metodę „add ()”.

Kod:

public class additionOperation (
static int addition(int num1, int num2)(return num1+num2;) //function declarationand definition for addition of two numbers
static double addition(double num1, num2)(return num1+num2;) //function declarationand definition for addition of three numbers
public static void main(String args()) (
system.out.printin(addition(35, 36)); //method overloading
system.out.printin(addition(35.5, 36.6)); //method overloading, we are calling same methods but for different type of arguments.
)
)

Wynik:

Punkty do odnotowania za przeładowanie

  • Przeładowanie w java jest w zasadzie „polimetem w czasie kompilacji. Metoda Przeładowanie w orfizmie C #”. Polimorfizm w czasie kompilacji w języku Java jest również nazywany „statyczną metodą wysyłki” lub „wczesnym wiązaniem”. Co mam na myśli przez ten żargon?
  • Polimorfizm, jak sama nazwa wskazuje, jest zasadniczo zdolnością do przyjmowania wielu form (poly: many, morph: form). Tak więc tutaj łączenie lub wiązanie przeciążonej funkcji i obiektu odbywa się czas kompilacji. Dlatego nazywa się to polimorfizmem w czasie kompilacji.
  • Zasadniczo tutaj powiązanie funkcji z obiektem odbywa się wcześnie przed czasem wykonywania (tj. W czasie kompilacji), dlatego też jest również nazywane „wczesnym wiązaniem”.
  • Wysyłanie statyczne jest rodzajem polimorfizmu lub wysyłania metod, które informują, w jaki sposób Java wybierze, która funkcja metody zostanie użyta w czasie kompilacji. (Mam na myśli, czy wykona dodanie dwóch liczb, czy trzech liczb w naszym przykładzie kodowania). Tak więc nazwa ta znana jest również jako metoda statyczna Dispatch.

Przesłanianie w Javie

  • Gdy podklasa java lub klasa potomna ma metodę o tej samej nazwie i zawierającą te same parametry lub argumenty i podobny typ zwracany jak metoda obecna w jej nadklasie lub klasie nadrzędnej, wówczas możemy wywołać metodę klasy podrzędnej jako przesłonięta metoda metody jego klasy nadrzędnej.
  • Załóżmy na przykład, że musimy wykonać pewne operacje wyświetlania zgodnie z typem klasy. Mam na myśli, że jeśli wywołam metodę klasy nadrzędnej, wyświetli komunikat zdefiniowany w klasie nadrzędnej. Ale gdy wywołamy metodę klasy podrzędnej, zastąpi ona komunikat wyświetlany w klasie nadrzędnej i wyświetli komunikat wyświetlany, który jest zdefiniowany w metodzie klasy podrzędnej. Dlatego w zależności od tego, który ekran musimy pokazać, możemy wywołać odpowiednią klasę (rodzic lub dziecko). W tym przypadku nie zmieniamy nazwy metody, argumentu i typu zwrotu. Właśnie zmieniamy funkcjonalność metody w klasie potomnej. Ale zamiast tego, jeśli nie wykonamy przesłonięcia, tzn. Nie podamy konkretnej implementacji metody potomnej, wówczas podczas wywoływania metody wyświetli ten sam komunikat, co obecny w klasie nadrzędnej.
  • Podczas pisania kodu użyjemy adnotacji @ Zastąp przed metodą, która ma zostać zastąpiona. Adnotacja @Override informuje kompilator, że metoda ma zastąpić metodę zadeklarowaną w nadklasie. Chociaż korzystanie z tego nie jest obowiązkowe, pomaga zapobiegać błędom. Jeśli metoda opatrzona adnotacją @Override nie zastąpi metody, kompilator wygeneruje błąd.

Reguły zastępowania metod Java

  1. Metoda musi mieć taką samą nazwę jak w klasie nadrzędnej
  2. Metoda musi mieć taki sam parametr jak w klasie nadrzędnej.
  3. Musi istnieć związek IS-A (dziedziczenie).

Kod:

//Parent or Super class
class Parent (
public void display() (
system.out.printin("Hello, I am from parent class");
)
)
//Child or sub class
class Sub extends Parent (
//Below method overrides the Parent display() method
// @override
public void display() (
system.out.printin("Hello, I am from child class");
)
)
//Driver class
public class Overriding (
public static void main?(String args())
(
Parent superObject = new Parent ();
superObject.display(); // Super class method is called
Parent subObject = new Sub();
subObject.display(); //Child class method is called by a parent type reference: this is functionality of method overriding
Sub subObject2 = new Sub(); //Child class method is called by a child type reference
subObject2.display();
)
)

Wynik:

Ograniczenia metody Zastępowanie:

  1. Prywatnych metod klasy nadrzędnej nie można zastąpić.
  2. Ostatecznych metod nie można zastąpić
  3. Nie można zastąpić metod statycznych

Punkty do odnotowania za zastąpienie

  • Przeciążenie w Javie jest w zasadzie „polimorfizmem w czasie wykonywania”. Polimorfizm w czasie wykonywania w języku Java jest również nazywany „dynamiczną wysyłką metod” lub „późnym wiązaniem”. Co więc oznacza ten żargon?
  • Polimorfizm, jak sama nazwa wskazuje, jest zasadniczo zdolnością do przyjmowania wielu form (poly: many, morph: form). Tak więc tutaj wywołanie przeciążonej funkcji obiektu jest wykonywane w czasie wykonywania. Stąd nazywany polimorfizmem w czasie wykonywania.
  • Zasadniczo tutaj wiązanie funkcji z obiektem odbywa się późno, czyli po kompilacji (tj. W czasie wykonywania); dlatego jest również nazywany „późnym wiązaniem”.
  • Dynamiczna wysyłka jest rodzajem polimorfizmu lub wysyłki metody, która mówi, jak Java wybierze, która funkcjonalność metody zostanie zastosowana w czasie wykonywania. Więc nazwa ta jest również znana jako Dynamiczna metoda wysyłki.

Wniosek

To kończy naszą naukę tematu „Przeciążanie i zastępowanie w Javie”. Napisz kody wymienione w powyższych przykładach w kompilatorze Java i sprawdź dane wyjściowe. Uczenie się kodów będzie niekompletne, jeśli nie będziesz robić tego samodzielnie, ponieważ poprawi to twoje umiejętności kodowania. Miłego kodowania !!

Polecane artykuły

Jest to przewodnik po przeciążaniu i zastępowaniu w Javie. Tutaj omawiamy metody Overloading wraz z regułami i ograniczeniami Overriding w Javie. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. Przesłanianie w JavaScript
  2. Przesłanianie w OOP
  3. Co to są generics w Javie?
  4. Przesłanianie w PHP
  5. Przeciążenie Pythona
  6. Dziedziczenie w PHP
  7. Kompletny przewodnik po dziedziczeniu w języku Python
  8. Przeciążanie i zastępowanie w C #
  9. Typy i obsługa błędów w JavaScript
  10. Przykłady i jak działają generics w C #
  11. Funkcja i reguły zastępowania w Pythonie