IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 17. diel - Rozhranie (interface) v Jave

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Kit
Tvůrce
Avatar
Kit:30.4.2013 10:50

Ještě tam chybí poznámka, že rozhraní se dá využít k vytváření objektů anonymních tříd.

PtakInterface ptak = new PtakInterface();

sice fungovat nebude, ale po doplnění metod

PtakInterface ptak = new PtakInterface() {

    @Override
    public void pipni() {
        System.out.println("♫ ♫ ♫");
    }

    @Override
    public void dychej() {
        System.out.println("Dýchám...");
    }

    @Override
    public void klovni() {
        System.out.println("Klov, klov!");
    }
};

z toho bude hezký anonymní objekt.

Odpovedať
30.4.2013 10:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Kit
David Hartinger:30.4.2013 10:58

Díky, anonymní třídy mám v plánu v dalších dílech, s trochou štěstí bych mohl tento týden dopsat sekci s OOP v Javě.

Odpovedať
30.4.2013 10:58
New kid back on the block with a R.I.P
Avatar
domino.turak
Člen
Avatar
domino.turak:23.6.2013 0:24

Ešte ja mám otázku že prečo môže byť VtakoJaster vtakoJaster=new VtakoJaster() ale napríklad VtakInterface vtak=new VtakInterface() byť nemôže?

Odpovedať
23.6.2013 0:24
"Never give up!"
Avatar
Kit
Tvůrce
Avatar
Odpovedá na domino.turak
Kit:23.6.2013 2:35

Protože v interface chybí implementace deklarovaného rozhraní. Můžeš ji doplnit při vytváření instance. Nemůžeš však použít konstruktor.

VtakInterface vtak = new VtakInterface() {
   // tady můžeš napsat implementaci
}

EDIT: Teď koukám, že jsem to už napsal o pár řádek výš. Četl jsi to vůbec?

Editované 23.6.2013 2:37
Odpovedať
23.6.2013 2:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
domino.turak
Člen
Avatar
Odpovedá na Kit
domino.turak:23.6.2013 13:22

Jáááj áno už mi to je jasné :) Áno čítal som, stále čítam všetky komentáre pod každým článkom, avšak ty si písal niečo o anonymných objektoch, tak som si to až teraz uvedomil že to čo som sa pýtal ja si už vlastne vysvetlil vyššie :-P V každom prípade ďakujem za odpoveď :)

Odpovedať
23.6.2013 13:22
"Never give up!"
Avatar
vfsdfsdfdsf
Člen
Avatar
vfsdfsdfdsf:16.1.2014 18:24

Ahoj,

mám malý dotaz.

Kdybychom u PtakoJestera měli ještě nějakou jinou zděděnou metodu, kterou bychom nechtěli implementovat, jak by se to udělalo?

Datový typ můžeme použít jen od jednoho rozhraní (buď PtakInterface nebo JesterInterface) i navzdory tomu, že třída implementuje obě rozhraní naráz, a když použijeme dat. typ PtakoJester, tak budeme mít k dispozici všechny metody (i zděděné které třeba nechceme)...

 
Odpovedať
16.1.2014 18:24
Avatar
Hartrik
Tvůrce
Avatar
Odpovedá na vfsdfsdfdsf
Hartrik:17.1.2014 14:29

U klasické třídy musí být vždy implementované všechny metody. Teoreticky by situace, kterou popisuješ neměla nastat - pokud by např. PtakoJester nemohl implementovat metodu klovni nebo vzletni, tak se nejedná o ptáka a PtakInterface se nepoužije.

 
Odpovedať
17.1.2014 14:29
Avatar
roman64
Tvůrce
Avatar
roman64:3.7.2015 8:31

Ahoj,
asi tomu úplně nerozumím. Při vícenásobné dědičnosti jde přeci o to, aby PtakoJester zdědil medoty tříd Ptak a Jester. V uvedem prikladu jsme ale dosahli pouze toho, že tyto metody (předků Ptak a Jester) přepíšeme (překryjeme) novým kódem (viz. throw new UnsupportedOpe­rationExcepti­on("Not supported yet."). Ty metody, které NetBeans nabízí u instance ptakoJester jsou metody třídy PtakoJester (přepsané metody potomka) a nikoliv zděděné metody předků Ptak a Jester. Nebo se pletu?

Odpovedať
3.7.2015 8:31
Definice šílenství je dělat stejnou věc znovu a znovu a očekávat jiné výsledky.“ Albert Einstein.
Avatar
martin kubin
Člen
Avatar
martin kubin:30.7.2015 17:13

zaujimalo by ma ako to je v praxi co sa tyka rozhrania.samotny clanok o rozhrani chapem,ked mam proste dve triedy napr Vtak a Jaster a chem spravit dalsiu odvodenu z tych dvoch ,napr VtakoJaster,tak si spravim z oboch rozhrania htore potom implementujem v triede VtakoJaster,sprav­ne?

Ale povedzme ze mam triedu Zviera s nejakou metodou public void dychat(),potom mam dalsia dve triedy ako v priklade hore,triedu Vtak a Jaster,oboje dedenia z triedy Zviera.A teraz chcem opat vytvorit triedu VtakoJaster.ako to byva v praxi?Zase si len vytvorim rozhrania z tried Vtak a Jaster a implementujem ich do VtakoJastera?Ma nejaky vyznam napr triedu VtakoJaster dedit zo Zvierata+imple­mentovat rozhrania VtakInterface a JasterInterface alebo dokonca ze by Vtakojaster dedil napr z triedy Vtak a mal iba jedno rozhranie z Jastera?
mozno to pisem moc komplikovane a mozno v tomto pripade to ani nehra velku rolu ale co sa pouziva v praxi ked tych tried je viac a tie su odvodene z dalsich tried atd

 
Odpovedať
30.7.2015 17:13
Avatar
Miroslav Bejlek:18.1.2017 16:31

Ahoj,
mám otázku, nechápu jednu věc, na začátku píšeš, že založíme nový projekt Rozhraní, ale u řešení a zavádění Java Interface, na tom obrázku, vidím, že je založen projekt Pták. Nebo to chápu celé špatně? Díky :-)

 
Odpovedať
18.1.2017 16:31
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!