<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Java_-_pre%C5%A5a%C5%BEovanie_met%C3%B3d</id>
	<title>Java - preťažovanie metód - História úprav</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Java_-_pre%C5%A5a%C5%BEovanie_met%C3%B3d"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Java_-_pre%C5%A5a%C5%BEovanie_met%C3%B3d&amp;action=history"/>
	<updated>2026-06-16T01:13:29Z</updated>
	<subtitle>História úprav pre túto stránku na wiki</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Java_-_pre%C5%A5a%C5%BEovanie_met%C3%B3d&amp;diff=7528&amp;oldid=prev</id>
		<title>Juraj: Vytvorená stránka „{{Navigacne menu - java}} Ako sme už povedali, v Jave dokážeme vytvárať hierarchiu tried. Teda hovoríme o nadradených a podradených triedach. Pojmom generická trie…“</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Java_-_pre%C5%A5a%C5%BEovanie_met%C3%B3d&amp;diff=7528&amp;oldid=prev"/>
		<updated>2010-11-11T21:30:59Z</updated>

		<summary type="html">&lt;p&gt;Vytvorená stránka „{{Navigacne menu - java}} Ako sme už povedali, v Jave dokážeme vytvárať hierarchiu tried. Teda hovoríme o nadradených a podradených triedach. Pojmom generická trie…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Navigacne menu - java}}&lt;br /&gt;
Ako sme už povedali, v Jave dokážeme vytvárať hierarchiu tried. Teda hovoríme o nadradených a podradených triedach. Pojmom generická trieda sme označili triedu, ktorá definuje určité vlastnosti pre skupinu podriadených tried. Podtrieda dedí všetky verejné vlastnosti a metódy. Tu sa dostávame k jednej zaujímavosti: ak od nadradenej triedy zdedíme nejakú metódu, môžeme ju v triede potomka predefinovať? Odpoveď znie áno, a tento mechanizmus sa nazýva preťažovanie, resp. prekrývanie (overriding).&lt;br /&gt;
&lt;br /&gt;
==Definícia preťažovania==&lt;br /&gt;
Princíp preťažovania metód je vo vytvorení novej metódy v podtiede, ktorá danú metódu zdedila od nadradenej triedy. V podtiede bude pôvodná metóda prekrytá (preťažená). Preťažená metóda musí mať rovnaký počet a typ argumentov ako pôvodná metóda.&lt;br /&gt;
Poznámka: metódy označené ako ''final'' sa preťažovať nedajú.&lt;br /&gt;
&lt;br /&gt;
Zoberme si príklad z predchádzajúcej časti [[Java - dedičnosť]], kde sme definovali hierarchiu tried reprezentujúcu zvieracie druhy.&lt;br /&gt;
&lt;br /&gt;
Do triedy ''Zviera'' doplníme metódu pohniSa, ktorá bude reprezentovať pohyb zvieraťa. Túto metódu zároveň definujme aj v triedach potomkov:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Zviera {&lt;br /&gt;
   // tu sa nachádza všetko z predchádzajúceho príkladu&lt;br /&gt;
   // doplníme nasledujúce:&lt;br /&gt;
   public void pohniSa(int k)&lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;Presuvam sa o &amp;quot;+k+&amp;quot; metrov&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class Cicavec extends Zviera{&lt;br /&gt;
&lt;br /&gt;
   public void pohniSa(int k)&lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;Bezim &amp;quot;+k+&amp;quot; metrov&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class Plaz extends Zviera {&lt;br /&gt;
&lt;br /&gt;
   public void pohniSa(int k)&lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;Plazim sa&amp;quot;+k+&amp;quot; metrov&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class Vtak extends Zviera {&lt;br /&gt;
&lt;br /&gt;
   public void pohniSa(int k)&lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;Letím &amp;quot;+k+&amp;quot; metrov&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class Pes extends Cicavec {&lt;br /&gt;
&lt;br /&gt;
   public void pohniSa(int k)&lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;Skáčem ako pes &amp;quot;+k+&amp;quot; metrov&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pre otestovanie tejto konštrukcie môžeme použiť nasledujúci kód:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class program {&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        Zviera a = new Zviera();&lt;br /&gt;
        Cicavec b = new Cicavec();&lt;br /&gt;
        Vtak c = new Vtak();&lt;br /&gt;
        Plaz d = new Plaz();&lt;br /&gt;
        Pes e = new Pes();&lt;br /&gt;
        //f je referencia na objekt Zviera, ale vytvorený bude objekt Pes &lt;br /&gt;
        Zviera f = new Pes();&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Nazov: &amp;quot; + a.nazov);&lt;br /&gt;
        a.pohniSa(5);&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Nazov: &amp;quot; + b.nazov);&lt;br /&gt;
        b.pohniSa(5);&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Nazov: &amp;quot; + c.nazov);&lt;br /&gt;
        c.pohniSa(5);&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Nazov: &amp;quot; + d.nazov);&lt;br /&gt;
        d.pohniSa(5);&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Nazov: &amp;quot; + e.nazov);&lt;br /&gt;
        e.pohniSa(5);&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Nazov: &amp;quot; + e.nazov);&lt;br /&gt;
        f.pohniSa(4);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Výpis programu je nasledujúci:&lt;br /&gt;
 Nazov: Zviera&lt;br /&gt;
 presúvam sa 5 metrov&lt;br /&gt;
 Nazov: Cicavec&lt;br /&gt;
 bežím 5 metrov&lt;br /&gt;
 Nazov: Vtak&lt;br /&gt;
 letím 5 metrov&lt;br /&gt;
 Nazov: Plaz&lt;br /&gt;
 plazím sa 5 metrov&lt;br /&gt;
 Nazov: Pes&lt;br /&gt;
 Skáčem ako pes 5 metrov&lt;br /&gt;
 Nazov: Pes&lt;br /&gt;
 Skáčem ako pes 4 metrov&lt;br /&gt;
&lt;br /&gt;
Zaujímavosťou je tu vytvorenie objektu f. Objekt f je definovaný ako odkaz (referencia) na objekt Zviera, ale vytvorený je objekt typu Pes (new Pes). Preto pri zavolaní metódy pohniSa, sa zavolá metóda z triedy Pes a nie Zviera.&lt;br /&gt;
&lt;br /&gt;
Rozhodovanie o tom, ktorá metóda sa v prípade obektu f vykoná, sa deje už pri kompilácii programu. Pri chybnom definovaní preťaženia nás teda informuje kompilátor. Uvažujme nasledujúci príklad:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class Zviera{&lt;br /&gt;
   public void pohniSa(int k)&lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;Presuvam sa o &amp;quot;+k+&amp;quot; metrov&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Vtak extends Zviera{&lt;br /&gt;
&lt;br /&gt;
   public void pohniSa(int k)&lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;Letím &amp;quot;+k+&amp;quot; metrov&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void spievaj(){&lt;br /&gt;
      System.out.println(&amp;quot;Snažím sa spevať&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
//----program-pre-testovanie-funkcnosti-navrhnutych-tried&lt;br /&gt;
public class program {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        Zviera a = new Zviera();      &lt;br /&gt;
        Zviera c = new Vtak();&lt;br /&gt;
      &lt;br /&gt;
        a.pohniSa(5);&lt;br /&gt;
&lt;br /&gt;
        c.pohniSa(5);&lt;br /&gt;
        c.spievaj();      &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kompilátor zahlási nasledujúcu chybu:&lt;br /&gt;
 progam.java:30: cannot find symbol&lt;br /&gt;
 symbol  : method spievaj()&lt;br /&gt;
 location: class Zviera&lt;br /&gt;
                 b.spievaj();&lt;br /&gt;
                  ^&lt;br /&gt;
Táto chyba je tu preto, pretože trieda Zviera nemá metódu spievaj. A objekt b je odkaz na triedu Zviera.&lt;br /&gt;
&lt;br /&gt;
==Pravidlá pre preťažovanie==&lt;br /&gt;
*Argumenty preťaženej metódy musia byť úplne rovnaké ako argumenty zdedenej metódy&lt;br /&gt;
*Návratový typ preťažovanej metódy by mal byť rovnaký (alebo podtyp) ako návratový typ pôvodnej metódy v rodičovskej triede.&lt;br /&gt;
*Úroveň prístupu nemôže byť reštriktívnejšia ako v pôvodnej triede. Napríklad: ak je v nadradenej triede metóda deklarovaná ako verejná (public), potom ako preťažené metóda nemôže byť private. &lt;br /&gt;
*Metódy môže byť preťažené, len ak sú zdedené z nadtriedy.&lt;br /&gt;
*Metóda deklarované ako final nemožno preťažovať.&lt;br /&gt;
*Metóda deklarovaná ako statická (static) sa nedá preťažiť, ale dá sa redeklarovavať.&lt;br /&gt;
*Ak sa metóda nedá zdediť, potom nemôže byť ani preťažené.&lt;br /&gt;
*Konštruktory nemôžu byť preťažené.&amp;lt;ref&amp;gt;tutorialspoint.com - Java Overriding http://www.tutorialspoint.com/java/java_overriding.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
===Použitie výrazu super===&lt;br /&gt;
V predchádzajúcej časti ([[Java - dedičnosť]]) bolo povedané, že výraz ''super'' znamená nadradenú triedu. Výraz ''super()'' sme použili v konštruktore odvodenej triedy, aby sme zavolali konštruktor rodičovskej triedy.&lt;br /&gt;
Výraz ''super'' však vo všeobecnosti znamená &amp;quot;nadradenú&amp;quot; triedu. Ukážeme to v nasledujúcom príklade:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class Zviera{&lt;br /&gt;
   public void pohniSa(int k)&lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;Presuvam sa o &amp;quot;+k+&amp;quot; metrov&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Plaz extends Zviera{&lt;br /&gt;
&lt;br /&gt;
   public void pohniSa(int k)&lt;br /&gt;
   {&lt;br /&gt;
     super.pohniSa(k);&lt;br /&gt;
     System.out.println(&amp;quot;plazím sa &amp;quot;+k+&amp;quot; metrov&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
//-----------------------------------------------&lt;br /&gt;
public class program {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        Zviera a = new Plaz();&lt;br /&gt;
        a.pohniSa(5);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Výstup z programu bude nasledovný:&lt;br /&gt;
 presúvam sa 5 metrov&lt;br /&gt;
 plazím sa 5 metrov&lt;br /&gt;
&lt;br /&gt;
Vysvetlenie: pri zavolaní metódy pohniSa sa začne vykonávať metóda pohniSa v triede Plaz. Ako prvé volanie je ''super.pohniSa(k);'', čiže zavolá sa metóda pohniSa z nadradenej triedy.&lt;br /&gt;
&lt;br /&gt;
==Zdroje a odkazy==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
* Method Overriding - http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter04/overriding.html&lt;/div&gt;</summary>
		<author><name>Juraj</name></author>
		
	</entry>
</feed>