Polymorfismus v Javě: Jak přetížit nebo přepsat metody

Polymorfismus v Javě: Jak přetížit nebo přepsat metody

Přetěžování a přepisování metod jsou dva způsoby, kterými Java demonstruje polymorfismus. Polymorfismus pochází ze spojení dvou řeckých slov: „poly“ znamená mnoho a „morph“ znamená formu. Polymorfismus proto umožňuje metodám nabývat mnoha podob.





Podle této příručky se dozvíte, jak přetížit nebo přepsat metody v Javě.





Co je přetížení metody?

„Přetížení metody“ označuje definování různých metod ve třídě se stejným názvem. Metody musí mít různé podpisy. Podpis metody je kombinací názvu metody a seznamu parametrů. Nezahrnuje typ návratu.





Kompilátor ví, kterou metodu použít, a to tak, že zkontroluje typ, počet parametrů a pořadí, ve kterém jsou umístěny.

Příbuzný: Zkoumání dědičnosti v programovacím jazyce Java



Přetížení metody ukazuje polymorfismus v době kompilace. Polymorfismus v době kompilace znamená, že kompilátor Java váže objekt na jeho funkčnost za běhu. Kompilátor kontroluje podpisy metod, aby toho dosáhl.

Tento typ polymorfismu je také známý jako statická nebo časná vazba.





Viz příklad přetížení metody níže:

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));
}
}

Výstup:





The cube of 5 is 125
The cube of 5.0 is 125.0
The cube of 0.5 is 0.125

Výše uvedený kód ukazuje, jak můžete získat krychli různých typů ( int , dvojnásobek , plovák ) pomocí stejné metody.

Obecně se přetížení metod používá k definování podobných metod s různými typy parametrů.

Co převažuje metoda?

To se týká jiné implementace metody v podtřídě. Metoda musí být již definována v nadřazené třídě.

Přepisující metoda (tj. Ta v podtřídě) musí mít stejný podpis metody jako v nadtřídě. Návratový typ přepisující metody může být stejný nebo podtyp toho v nadtřídě.

Přepsání se obecně používá k zahrnutí konkrétní implementace chování objektu do podtřídy.

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!');
}
}

Výstup:

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!

Výše uvedený příklad ukazuje, jak metoda zpráva() je přepsán v podtřídách Úspory a Pevná záloha . Pro držitele bankovního účtu se spořicím účtem a pro účet s fixním vkladem se zobrazí různé zprávy.

Příbuzný: Co potřebujete vědět o používání řetězců v Javě

Je také třeba poznamenat, že přepsání metody ukazuje běhový polymorfismus nebo odeslání dynamické metody. To znamená, že metoda, která má být volána, je vyřešena spíše za běhu než při kompilaci.

Chcete -li zabránit přepsání metody, použijte klíčové slovo finále .

final void message (){
System.out.println('
Thank you for opening an account with us!');
}

Když se podtřída pokusí přepsat, dojde k chybě kompilace.

V ideálním případě by měly být všechny metody volané v rámci konstruktoru finále . Toto má zabránit jakýmkoli nechtěným změnám, které mohou být způsobeny podtřídami.

Někdy možná budete muset přistoupit k přepsané metodě v rámci přepisovací metody. Můžete použít klíčové slovo super následován operátorem teček ( . ) a v takovém případě název metody.

Zvažte nadtřídu Zvíře .

class Animal{
public void move() {
System.out.println('
I can move.');
}
}

Níže je podtřída, tzv Ryba , to má přednost přestěhovat se() :

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();
}
}

Výstup:

bezplatné online televizní kanály z celého světa
I can swim.
I can move.

Při přepsání metody je také třeba mít na paměti použitý modifikátor přístupu. Modifikátor v podtřídě by měl mít stejnou úroveň viditelnosti nebo vyšší než v základní třídě. Pokud je například metoda v základní třídě definována jako chráněný , pak může být převažující metoda buď chráněný nebo veřejnost .

Jednoduchý kód s polymorfismem

Přepsání a přetížení metod jsou důležité pro zjednodušení kódu a jednoduchý kód je dobrá praxe.

Proč? Představte si komplexní kódovou základnu s více vstupy a výstupy, než má Grand Central Station. Nyní si představte, že vám zničující chyba začne ničit vaši tvrdou práci před očima. Musíte izolovat zdroj infekce a musíte to udělat rychle.

Hodně štěstí, nezjednodušili jste kód ... Nyní vás čeká skutečná lekce v kryptografii. Využití efektivních datových struktur a snaha zkrátit kód (například mít na paměti DRY) je vaše nejlepší obrana proti takové situaci.

Další na seznamu učení Java by měla být práce s poli. Jsou to důležité datové struktury používané k ukládání dávek datových bodů.

Podíl Podíl tweet E-mailem Jak vytvářet a provádět operace na polích v Javě

Učit se Javu? Nechejte pole snadno zpracovávat vaše data.

Číst dále
Související témata
  • Programování
  • Jáva
  • Návody na kódování
O autorovi Jerome Davidson(22 článků zveřejněno)

Jerome je spisovatelem štábu v MakeUseOf. Zabývá se články o programování a Linuxu. Je také nadšencem kryptoměn a vždy má přehled o krypto průmyslu.

Více od Jerome Davidsona

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru