- Zrozumienie problemu bez przesłaniania metod
- Czy możemy zastąpić metodę statyczną
- Przeciążanie metod a zastępowanie metod
Jeśli podklasa (klasa podrzędna) ma tę samą metodę, co zadeklarowana w klasie nadrzędnej, nazywa się to nadpisywanie metod w Javie .
Innymi słowy, jeśli podklasa zapewnia specyficzną implementację metody, która została zadeklarowana przez jedną z jej klas nadrzędnych, nazywa się to przesłonięciem metody.
Użycie przesłaniania metody Java
- Nadpisywanie metod służy do zapewnienia konkretnej implementacji metody, która jest już zapewniona przez jej nadklasę.
- Zastępowanie metod jest używane w przypadku polimorfizmu w czasie wykonywania
Reguły zastępowania metod Java
- Metoda musi mieć taką samą nazwę jak w klasie nadrzędnej
- Metoda musi mieć taki sam parametr jak w klasie nadrzędnej.
- Musi istnieć relacja IS-A (dziedziczenie).
Zrozumienie problemu bez przesłaniania metod
Rozumiemy problem jaki możemy napotkać w programie jeśli nie zastosujemy przesłaniania metod.
//Java Program to demonstrate why we need method overriding //Here, we are calling the method of parent class with child //class object. //Creating a parent class class Vehicle{ void run(){System.out.println('Vehicle is running');} } //Creating a child class class Bike extends Vehicle{ public static void main(String args[]){ //creating an instance of child class Bike obj = new Bike(); //calling the method with child class instance obj.run(); } }Przetestuj teraz
Wyjście:
Vehicle is running
Problem polega na tym, że muszę zapewnić konkretną implementację metody run() w podklasie, dlatego używamy przesłaniania metod.
Przykład przesłaniania metody
W tym przykładzie zdefiniowaliśmy metodę run w podklasie zgodnie z definicją w klasie nadrzędnej, ale ma ona pewną specyficzną implementację. Nazwa i parametry metody są takie same, a między klasami istnieje relacja IS-A, więc następuje przesłonięcie metody.
//Java Program to illustrate the use of Java Method Overriding //Creating a parent class. class Vehicle{ //defining a method void run(){System.out.println('Vehicle is running');} } //Creating a child class class Bike2 extends Vehicle{ //defining the same method as in the parent class void run(){System.out.println('Bike is running safely');} public static void main(String args[]){ Bike2 obj = new Bike2();//creating object obj.run();//calling method } }Przetestuj teraz
Wyjście:
Bike is running safely
Prawdziwy przykład przesłaniania metody Java
Rozważmy scenariusz, w którym Bank jest klasą zapewniającą funkcjonalność umożliwiającą uzyskanie stopy procentowej. Jednak stopa procentowa różni się w zależności od banku. Na przykład banki SBI, ICICI i AXIS mogą zapewnić stopę procentową w wysokości 8%, 7% i 9%.
Nadpisywanie metod Java jest najczęściej stosowane w polimorfizmie środowiska wykonawczego, o czym dowiemy się na następnych stronach.
//Java Program to demonstrate the real scenario of Java Method Overriding //where three classes are overriding the method of a parent class. //Creating a parent class. class Bank{ int getRateOfInterest(){return 0;} } //Creating child classes. class SBI extends Bank{ int getRateOfInterest(){return 8;} } class ICICI extends Bank{ int getRateOfInterest(){return 7;} } class AXIS extends Bank{ int getRateOfInterest(){return 9;} } //Test class to create objects and call the methods class Test2{ public static void main(String args[]){ SBI s=new SBI(); ICICI i=new ICICI(); AXIS a=new AXIS(); System.out.println('SBI Rate of Interest: '+s.getRateOfInterest()); System.out.println('ICICI Rate of Interest: '+i.getRateOfInterest()); System.out.println('AXIS Rate of Interest: '+a.getRateOfInterest()); } }Przetestuj teraz
Output: SBI Rate of Interest: 8 ICICI Rate of Interest: 7 AXIS Rate of Interest: 9
Czy możemy zastąpić metodę statyczną?
Nie, metody statycznej nie można zastąpić. Można to udowodnić za pomocą polimorfizmu w czasie wykonywania, więc dowiemy się tego później.
Dlaczego nie możemy zastąpić metody statycznej?
Dzieje się tak dlatego, że metoda statyczna jest powiązana z klasą, podczas gdy metoda instancji jest powiązana z obiektem. Statyczny należy do obszaru klas, a instancja należy do obszaru sterty.
zawiera metodę Java
Czy możemy zastąpić główną metodę Java?
Nie, ponieważ main jest metodą statyczną.
Różnica między przeciążaniem metody a zastępowaniem metody w java
Kliknij mnie, aby zobaczyć różnicę między przeciążaniem metody a zastępowaniem
Więcej tematów na temat zastępowania metod (nie dla początkujących)
Zastępowanie metody za pomocą modyfikatora dostępuPrzyjrzyjmy się koncepcji przesłaniania metody za pomocą modyfikatora dostępu.
Obsługa wyjątków z przesłonięciem metodyPrzyjrzyjmy się koncepcji przesłaniania metod z obsługą wyjątków.