Przeciążanie i zastępowanie metod to dwa sposoby demonstrowania polimorfizmu w Javie. Polimorfizm pochodzi z połączenia dwóch greckich słów: „poly” oznaczającego wiele i „morph” oznaczającego formę. Dlatego polimorfizm umożliwia metodom przybieranie wielu form.
Postępuj zgodnie z tym przewodnikiem, aby dowiedzieć się, jak przeciążać lub zastępować metody w Javie.
Co to jest przeciążenie metody?
„Przeciążanie metod” odnosi się do definiowania różnych metod w klasie o tej samej nazwie. Metody muszą mieć różne sygnatury. Sygnatura metody jest kombinacją nazwy metody i listy parametrów. Nie obejmuje typu zwracanego.
Kompilator wie, której metody użyć, sprawdzając typ, liczbę parametrów i kolejność ich umieszczania.
Związane z: Badanie dziedziczenia w języku programowania Java
Przeciążanie metod demonstruje polimorfizm w czasie kompilacji. Polimorfizm w czasie kompilacji oznacza, że kompilator Java wiąże obiekt z jego funkcjonalnością w czasie wykonywania. Kompilator sprawdza sygnatury metod, aby to osiągnąć.
Ten rodzaj polimorfizmu jest również znany jako wiązanie statyczne lub wczesne.
Zobacz poniższy przykład przeciążania metody:
class Arithmetic{
int cube(int x){
return x*x*x;
}
double cube(double x){
return x*x*x;
}
float cube(float x){
return x*x*x;
}
public static void main(String[] args){
Arithmetic myMultiplication = new Arithmetic();
System.out.println('The cube of 5 is ' + myMultiplication.cube(5));
System.out.println('The cube of 5.0 is ' + myMultiplication.cube(5.0));
System.out.println('The cube of 0.5 is ' + myMultiplication.cube(0.5));
}
}
Wyjście:
The cube of 5 is 125
The cube of 5.0 is 125.0
The cube of 0.5 is 0.125
Powyższy kod pokazuje, w jaki sposób można uzyskać kostkę różnych typów ( int , podwójnie , pływak ) przy użyciu tej samej metody.
Ogólnie rzecz biorąc, przeciążanie metod służy do definiowania podobnych metod z różnymi typami parametrów.
Co to jest zastępowanie metody?
Odnosi się to do innej implementacji metody w podklasie. Metoda musi być już zdefiniowana w klasie nadrzędnej.
Nadrzędna metoda (tj. ta w podklasie) musi mieć taką samą sygnaturę metody jak ta w nadklasie. Zwracany typ metody nadpisującej może być taki sam lub być podtypem tego w nadklasie.
Zastępowanie jest zwykle używane do włączenia określonej implementacji zachowania obiektu w podklasie.
class Account{
public void message() {
System.out.println('
Thank you for opening an account with us!');
}
public static void main(String args[]) {
Account myAccount = new Account();
Savings mySavings = new Savings();
FixedDeposit myFixedDepo = new FixedDeposit();
myAccount.message();
mySavings.message();
myFixedDepo.message();
}
}
class Savings extends Account {
public void message() {
System.out.println('
Thank you for opening a Savings account with us!');
}
}
class FixedDeposit extends Account {
public void message() {
System.out.println('
Thank you for opening a Fixed Deposit account with us!');
}
}
Wyjście:
Thank you for opening an account with us!
Thank you for opening a Savings account with us!
Thank you for opening a Fixed Deposit account with us!
Powyższy przykład pokazuje, jak metoda wiadomość() jest zastępowany w podklasach Oszczędności oraz Stały depozyt . Dla posiadaczy kont bankowych z kontem Oszczędnościowym oraz dla posiadaczy rachunku z lokatą stałą będą wyświetlane różne komunikaty.
Związane z: Co musisz wiedzieć o używaniu ciągów w Javie
Warto również zauważyć, że przesłanianie metod demonstruje polimorfizm środowiska uruchomieniowego lub dynamiczne wysyłanie metod. Oznacza to, że metoda, która ma zostać wywołana, jest rozwiązywana w czasie wykonywania, a nie podczas kompilacji.
Aby uniknąć nadpisania metody, użyj słowa kluczowego finał .
final void message (){
System.out.println('
Thank you for opening an account with us!');
}
Gdy podklasa próbuje ją zastąpić, wystąpi błąd kompilacji.
W idealnym przypadku wszystkie metody wywoływane w konstruktorze powinny być: finał . Ma to na celu uniknięcie wszelkich niezamierzonych zmian, które mogą być spowodowane przez podklasy.
Czasami może być potrzebny dostęp do zastąpionej metody w ramach metody zastępującej. Możesz użyć słowa kluczowego Super po którym następuje operator kropki ( . ) i nazwę metody w takim przypadku.
Rozważ superklasę Zwierzę .
class Animal{
public void move() {
System.out.println('
I can move.');
}
}
Poniżej znajduje się podklasa o nazwie Ryba , który zastępuje ruszaj się() :
class Fish extends Animal {
public void move() {
System.out.println('
I can swim.');
super.move();
}
public static void main(String args[]){
Fish Tilapia = new Fish();
Tilapia.move();
}
}
Wyjście:
jak znaleźć wszystkie konta e-mail na moje nazwisko
I can swim.
I can move.
Podczas zastępowania metody należy również pamiętać o użytym modyfikatorze dostępu. Modyfikator w podklasie powinien mieć ten sam lub wyższy poziom widoczności niż w klasie bazowej. Na przykład, jeśli metoda w klasie bazowej jest zdefiniowana jako chroniony , wtedy nadrzędną metodą może być chroniony lub publiczny .
Prosty kod z polimorfizmem
Nadpisywanie i przeciążanie metod jest ważne dla uproszczenia kodu, a prosty kod jest dobrą praktyką.
Czemu? Wyobraź sobie złożoną bazę kodów z większą liczbą tajników niż Grand Central Station. Teraz wyobraź sobie, że niszczycielski błąd zaczyna niszczyć twoją ciężką pracę na twoich oczach. Musisz odizolować źródło infekcji i musisz to zrobić szybko.
Powodzenia, nie uprościłeś kodu... Teraz czeka cię prawdziwa lekcja kryptografii. Stosowanie efektywnych struktur danych i robienie wszystkiego, co możliwe, aby skrócić kod (np. pamiętanie o DRY) jest najlepszą obroną przed taką sytuacją.
Następna na liście do nauki języka Java powinna być praca z tablicami. Są to ważne struktury danych używane do przechowywania partii punktów danych.
Udział Udział Ćwierkać E-mail Jak tworzyć i wykonywać operacje na tablicach w JavieUczysz się Javy? Pozwól, aby tablice z łatwością obsłużyły Twoje dane.
Czytaj dalej Powiązane tematy- Programowanie
- Jawa
- Poradniki kodowania
Jerome jest pisarzem sztabowym w MakeUseOf. Zajmuje się artykułami na temat programowania i systemu Linux. Jest także entuzjastą kryptowalut i zawsze śledzi branżę kryptograficzną.
Więcej od Jerome'a DavidsonaZapisz się do naszego newslettera
Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!
Kliknij tutaj, aby zasubskrybować