Wprowadzenie do zastępowania w operacjach operacyjnych

Podczas implementowania koncepcji dziedziczenia w ups wszystkie funkcje w klasie nadrzędnej są używane przez wszystkie jej klasy pochodne. Ale w przypadku, gdy jedna klasa pochodna chce konkretnej implementacji funkcji zadeklarowanej w klasie nadrzędnej, ale używającej tej samej nazwy, tej samej sygnatury i tego samego typu zwrotu, wówczas używana jest funkcja przesłonięcia. Przesłonięcie pozwala klasie potomnej na nowo zdefiniować funkcję, która została już zdefiniowana w jej klasie nadrzędnej lub nadklasie. W ten sposób można użyć obu definicji, określając obiekt klasy podczas wywoływania metody. Na przykład, niech będzie funkcja sumowania zarówno w klasie nadrzędnej, jak i podrzędnej, a podczas wywoływania funkcji używamy obiektu klasy podrzędnej, wówczas wywoływana jest metoda obecna w klasie podrzędnej, a jeśli użyjesz obiektu klasy nadrzędnej, wówczas metoda będzie obecna w klasie nadrzędnej zostaną wywołane. mówi się, że ta metoda w klasie potomnej zastępuje metodę obecną w jej nadklasach.

Potrzeba zastąpienia metody

Oto metody zastępowania:

  • Przesłonięcie metody polimorfizmu środowiska wykonawczego pomaga osiągnąć polimorfizm środowiska wykonawczego w obiektowych językach programowania, takich jak c ++, java, c # itp.
  • Polimorfizm oznacza wiele form, tj. Jedną sygnaturę i wiele definicji. w językach zorientowanych obiektowo, gdy zarówno klasa pochodna, jak i klasa nadrzędna mają tę samą nazwę i podpis funkcji, wówczas przy jednorazowym kompilatorze rozpoznaje definicję, czy trzeba ją wywołać. Polimorfizm środowiska wykonawczego oznacza powiązanie definicji metody z metodą nazywaną występującą w czasie wykonywania programu. Umożliwia implementację aspektu polimorfizmu „jedna sygnatura wielokrotnej definicji”. Ta funkcja wykorzystuje dynamiczne wysyłanie metod, które ma potężną koncepcję projektowania obiektowego, aby zapewnić ponowne użycie kodu i niezawodność. Przesłonięcie metody pozwala nam na wywołanie metody do dowolnej z jej klas pochodnych bez znajomości typu obiektu klasy pochodnej.
  • Korzystając z tej funkcji, można zaimplementować specjalną definicję funkcji ogólnej, która została odziedziczona z jej nadklasy.

Jak działa zastąpienie w OOP?

Poniższe objaśnienie mówi, jak działa nadpisywanie:

  • OOP, pomóż nam wdrożyć polimorfizm środowiska wykonawczego, dziedzicząc cechy klasy w innej. Rzućmy okiem na działanie nadpisywania w OOP. Później załóżmy, że mamy zwierzę o nazwie nadklasy, które ma dwie funkcje mówienia i jedzenia. Istnieją dwie podklasy kot i pies, które rozszerzają nazwę zwierzęcia nadklasy.
  • Te dwie podklasy używają tych samych funkcji mów i jedz, ale zmieniają implementację, ale zachowują sygnaturę tych samych metod. Teraz w naszej głównej metodzie, jeśli wywołasz te funkcje wybierając zmienną referencyjną, to w czasie wykonywania tylko decyzja zostanie podjęta, która funkcja ma zostać wywołana. Na przykład, jeśli obiekt posiada różnicę klasy potomnej, którą jest kot lub pies, wówczas funkcja odpowiedniej klasy zostanie wywołana, w przeciwnym razie, jeśli obiekt posiada odwołanie do klasy nadrzędnej, wówczas zostanie wywołana funkcja klasy zwierzęcej.
  • Tutaj powinniśmy zobaczyć, że funkcja jest wywoływana, nie zależy od typu zmiennej referencyjnej. Decyduje o tym kompilator w czasie wykonywania, tylko pomaga to we wdrażaniu polimorfizmu w czasie wykonywania. Pomaga także zaimplementować specjalistyczną definicję metody ogólnej definicji metody w klasie nadrzędnej.

Kod:

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Cat extends Animal(
//Overriding method
public void eat()
(
System.out.println("Cat is eating");
)
public void speak()
(
System.out.println("Cat is meowing");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an1 = new Cat();
Animal an2 = new Animal();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Wynik:

Uwaga: Zmienna referencyjna typu potomnego nie może być używana do przechowywania referencji do typu macierzystego.

Zasady zastępowania metody

Oto zasady zastępowania:

Zasada nr 1

Lista parametrów zadeklarowanych w funkcji klasy nadrzędnej powinna pasować do listy parametrów wymienionych w definicji metody przesłaniającej w klasie potomnej.

Na przykład:

Metoda w klasie nadrzędnej

public int test1(int a);

Metoda w klasie potomnej - publiczny ciąg test1 (); // zastąpienie metody nie będzie tutaj obsługiwana, ponieważ typ zwracany i argumenty są różne, ale nie wystąpi błąd czasu kompilacji. Ta metoda będzie uważana za nową metodę klasy podrzędnej.

Reguła nr 2

Typ zwracany przez metodę obecną w klasie potomnej musi być taki sam lub podtyp typu zwracanego przez zastępowaną metodę

Na przykład:

Metoda w klasie nadrzędnej

public Object test1(int a);

Metoda w klasie potomnej

public String test1();

Błędny

Metoda w klasie nadrzędnej

public String test1(int a);

Metoda w klasie potomnej

public Object test1();

Reguła # 3

Specyfikator dostępu obecny w metodzie klasy nadrzędnej musi być równie restrykcyjny lub bardziej restrykcyjny niż metoda nadpisująca go w klasie potomnej.

Błędny

Metoda w klasie nadrzędnej

public int test1(int a);

Metoda w klasie potomnej

private int test1() ; // more restrictive than public one

Reguła # 4

Tylko metoda instancji ze specyfikatorem dostępu jako chronioną publicznie lub domyślną można zastąpić. Wynika to z faktu, że tylko ta metoda instancji może być dziedziczona przez podklasę, a zatem może zostać zastąpiona. W przypadku, gdy metoda instancji określona w klasie nadrzędnej jest bardziej restrykcyjnym przykładem metody publicznej, nie zostanie ona odziedziczona w jej podklasie, a jeśli ktoś definiuje tę samą metodę w podklasie, scenariusz nie jest traktowany jako metoda zastępująca, ponieważ metody publiczne nie mogą odziedziczone, nie można tego zastąpić.

Na przykład:

Metoda w klasie nadrzędnej

public int test1(int a); //can be inherited and overridden

Metoda w klasie potomnej

private int test1();

Błędny

Metoda w klasie nadrzędnej

private int test1(int a); //can not be inherited and overridden

Metoda w klasie potomnej

private int test1();//not overriding method of the parent class

Jest uważany za nową prywatną metodę klasy potomnej

Reguła nr 5

Super słowa kluczowego można użyć do wywołania funkcji klasy nadrzędnej, która została zastąpiona przez jej podklasę.

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
super.speak(); // Here super keyword is used to call the speak function of the super class.ieAnimal
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an2 = new Animal();
an.speak();
an.eat();
an2.eat();
)
)

Wynik:

Reguła # 6

Konstruktor klasy nie może zostać zastąpiony przez jego podklasy, ponieważ konstruktor dwóch klas nie może być taki sam.

Reguła # 7

Obsługa wyjątków w zastępowaniu.

  • Metoda incase w klasie nadrzędnej nie zgłasza żadnego wyjątku, wówczas metoda zastępująca obecna w podklasie może zgłosić tylko niezaznaczony wyjątek. W przypadku, gdy metoda zastępująca pokazuje zaznaczony wyjątek, kompilator wyświetli błąd.
  • Jeśli metoda w nadrzędnej klasie, która jest zastępowana, zgłasza wyjątek, metoda zastępowania tandemu obecna w podklasie musi przejść przez wyjątek tego samego poziomu lub jego podtyp w hierarchii wyjątków lub w ogóle nie ma wyjątku.

Reguła # 8

Możliwa jest również metoda zastępująca dziedziczenie wielopoziomowe.

Kod:

class Creature (
//Overriding method
public void eat()
(
System.out.println("Creature is eating");
)
public void speak()
(
System.out.println("Creature is speaking");
)
)
class Animal extends Creature(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(public static void main(String() args)(
Creature an=new Dog();
Animal an1 = new Animal();
Animal an2 = new Dog();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Wynik:

Reguła # 9

Przesłanianie reguł metod w Javie

  • Zsynchronizowaną metodę można łatwo zastąpić niezsynchronizowaną metodą i odwrotnie.
  • Metodę abstrakcyjną obecną w klasach lub interfejsach abstrakcyjnych należy nadpisać, aby zapewnić określoną implementację deklarowanych metod, w przeciwnym razie pojawi się błąd kompilacji.
  • Definiowanie metody statycznej o takiej samej nazwie jak metoda statyczna występująca w klasie nadrzędnej jest znana jako metoda ukrywania, a nie zastępowanie metody, ponieważ nie implementuje polimorfizmu środowiska wykonawczego.
  • Ostatecznych metod nie można zastąpić.

Reguła # 10

Metoda zastępująca w C ++

Metoda zastępująca w c plus jest osiągana przez zadeklarowanie metody jako wirtualnej. Wirtualne słowo kluczowe służy do osiągnięcia polimorfizmu środowiska uruchomieniowego w c ++. Natomiast w Javie wszystkie funkcje są domyślnie traktowane jako wirtualne.

Reguła # 11

Przesłonięcie metody różni się od przeciążenia metody, ponieważ jest to proces polimorfizmu środowiska wykonawczego, podczas gdy przeciążenie i metoda są przykładem polimorfizmu w czasie kompilacji. W przypadku zastąpienia metody obowiązkowe jest zachowanie takiego samego podpisu metody. kiedy dokonamy zmiany w typie zwracanej metody lub liście parametrów, kompilator traktuje to jako przeciążenie metody.

Metoda przesłonięcia Przeciążenie metody
class A(
public void test()(
System.out.println("In class A");
)
)
class B extends A(
public void test()(
System.out.println("In class A");
))public class Test(
public static void main(String() args)(
A a=new B();
a.test();
A b =new A();
b.test();
))
class A(
public void test()(
System.out.println("Method without arguments");
)
public void test(int x)(
System.out.println("Method with arguments");
System.out.println(x);
))public class Test(
public static void main(String() args)(
A a=new A();
a.test();
a.test(2);
)
)

Wynik:

Kiedy stosować metodę zastępowania metody?

Oto metody korzystania z zastępowania:

  • OOP zapewnia wspaniałą funkcję dziedziczenia, która tworzy wspaniałą hierarchię między nadklasą i podklasą, od mniejszej specjalizacji do większej specjalizacji.
  • Czy możemy wykorzystać nadklasę, aby zapewnić strukturę, która może być dziedziczona we wszystkich jej podklasach, a podklasy możemy zdefiniować różne funkcjonowanie tych metod. Osiąga się to poprzez nadpisanie funkcji, w której można zapewnić wyspecjalizowane funkcjonowanie podklasom init dziedziczonych metod.
  • Pomaga także zapewnić strukturę dla wielu klas, zapewniając zbiór zmiennych i metodę, która musi zostać zaimplementowana we wszystkich jej podklasach.

Wniosek

OOP, koncepcje sprawiają, że kod jest solidny i łatwy do ponownego użycia, gdy są one skutecznie wykorzystywane. Funkcja przesłonięcia zwiększa wykorzystanie dziedziczenia w celu zapewnienia konkretnej implementacji ogólnej metody klasy nadrzędnej. W jej podklasach. Wykorzystuje to koncepcję polimorfizmu środowiska uruchomieniowego, aby uruchomić poprawną definicję metody. Dynamiczne wysyłanie metod odbywa się tylko w czasie wykonywania, które sprawdza odwołanie do klasy, którą obiekt utrzymuje w celu wywołania metody. Ta funkcja opiera się na różnych regułach i nie ma zastosowania do metod statycznych. Możemy zaimplementować zastępowanie metod w dowolnym języku obiektowym i sprawić, że nasz program będzie szybszy i bardziej niezawodny.

Polecane artykuły

Jest to przewodnik po zastępowaniu w OOP. Tutaj omawiamy, jak przesłonięcie działa w OOP, kiedy go używać, oraz 11 reguł z kodami i danymi wyjściowymi. Możesz również przejrzeć nasze inne powiązane artykuły, aby dowiedzieć się więcej-

  1. Przesłanianie w PHP
  2. Przesłanianie w JavaScript
  3. Co to jest OOP?
  4. Przesłanianie metod w języku C #
  5. Przykłady przesłonięcia w Javie
  6. Metoda statyczna JavaScript | Jak pracować z przykładami