Přetížení metody a přepsání jsou dva způsoby, jak Java demonstruje polymorfismus. Polymorfismus pochází z kombinace dvou řeckých slov: „poly“ znamená mnoho a „morph“ znamená formu. Polymorfismus proto umožňuje, aby metody měly mnoho podob.

V této příručce se dozvíte, jak přetížit nebo přepsat metody v prostředí Java.

Co je přetížení metody?

„Přetížení metody“ odkazuje na 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 návratový typ.

Kompilátor ví, kterou metodu použít, kontrolou typu, počtu 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 demonstruje polymorfismus v době kompilace. Polymorfismus v době kompilace znamená, že kompilátor Java váže objekt na svou funkčnost za běhu. Kompilátor za tímto účelem kontroluje podpisy metod.

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

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

instagram viewer
třída Aritmetika {
int kostka (int x) {
návrat x * x * x;
}
dvojitá kostka (dvojitá x) {
návrat x * x * x;
}
float cube (float x) {
návrat x * x * x;
}
public static void main (String [] args) {
Aritmetická myMultiplication = nová Aritmetika ();
System.out.println ("Kostka 5 je" + myMultiplication.cube (5));
System.out.println ("Kostka 5.0 je" + myMultiplication.cube (5.0));
System.out.println ("Kostka 0,5 je" + myMultiplication.cube (0,5));
}
}

Výstup:

Krychle 5 je 125
Kostka 5.0 je 125.0
Krychle 0,5 je 0,125

Výše uvedený kód ukazuje, jak můžete získat kostku různých typů (int, dvojnásobek, plovák) stejnou metodou.

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

Co je přepsání metody?

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. Metoda v podtřídě) musí mít stejný podpis metody jako v nadtřídě. Návratový typ přepisovací metody může být stejný nebo podtyp jako v nadtřídě.

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

účet třídy {
public void message () {
System.out.println ("
Děkujeme, že jste si u nás otevřeli účet! ");
}
public static void main (String args []) {
Účet myAccount = nový účet ();
Úspory mySavings = nové Úspory ();
FixedDeposit myFixedDepo = nový FixedDeposit ();
myAccount.message ();
mySavings.message ();
myFixedDepo.message ();
}
}
Třída Savings rozšiřuje Účet {
public void message () {
System.out.println ("
Děkujeme, že jste si u nás otevřeli Spořicí účet! ");
}
}
třída FixedDeposit rozšiřuje účet {
public void message () {
System.out.println ("
Děkujeme, že jste si u nás otevřeli účet s pevným vkladem! ");
}
}

Výstup:

Děkujeme, že jste si u nás otevřeli účet!
Děkujeme, že jste si u nás otevřeli spořicí účet!
Děkujeme, že jste si u nás otevřeli účet s pevným vkladem!

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

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

Za zmínku stojí také to, že přepsání metody demonstruje běhový polymorfismus nebo odeslání dynamické metody. To znamená, že metoda, která má být volána, je vyřešena za běhu, nikoli při kompilaci.

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

final void message () {
System.out.println ("
Děkujeme, že jste si u nás otevřeli účet! ");
}

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 konstruktoru finále. To zabrání nechtěným změnám, které mohou být způsobeny podtřídami.

Někdy budete možná potřebovat přístup k přepsané metodě v rámci přepsané metody. Můžete použít klíčové slovo super následovaný tečkovým operátorem (.) a název metody v takovém případě.

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

třída Zvíře {
public void move () {
System.out.println ("
Mohu se hýbat. ");
}
}

Níže je podtřída s názvem Ryba, který má přednost hýbat se():

třída Fish rozšiřuje Animal {
public void move () {
System.out.println ("
Umím plavat.");
super.move ();
}
public static void main (String args []) {
Fish Tilapia = nová ryba ();
Tilapia.move ();
}
}

Výstup:

Umím plavat.
Můžu se hýbat.

Při přepsání metody si musíte také uvědomit 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ě. Například pokud je metoda v základní třídě definována jako chráněný, pak může být hlavní metoda buď chráněný nebo veřejnost.

Jednoduchý kód s polymorfismem

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

Proč? Představte si složitou základnu kódů s více vstupy a výstupy než na stanici Grand Central. Nyní si představte, že ničivá chyba začne ničit vaši tvrdou práci před vašima očima. Musíte izolovat zdroj infekce a musíte to udělat rychle.

Hodně štěstí, nezjednodušili jste kód... Nyní se chystáte získat skutečnou lekci v kryptografii. Zaměstnání efektivních datových struktur a snaha o zkrácení kódu (například udržování DRY na paměti) je nejlepší obranou proti takové situaci.

Další ve vašem výukovém seznamu 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ů.

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

Učíš se Javu? Umožněte polím snadno zpracovat vaše data.

Přečtěte si další

Související témata
  • Programování
  • Jáva
  • Výukové programy pro kódování
O autorovi
Jerome Davidson (15 článků publikováno)

Jerome je spisovatel v MakeUseOf. Pokrývá články o programování a Linuxu. Je také nadšencem kryptoměn a neustále sleduje kryptoměnový průmysl.

Více od Jerome Davidsona

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

Připojte se k našemu zpravodaji s technickými tipy, recenzemi, bezplatnými elektronickými knihami a exkluzivními nabídkami!

Ještě jeden krok…!

V e-mailu, který jsme vám právě poslali, potvrďte svou e-mailovou adresu.

.