Diskuze: Otázky ohledně intefrace
Člen
Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Promiň, ale vůbec nerozumím, na co se ptáš. Konkrétně nerozumím
pojmům jako použít metody interface mimo třídu, napsat
interface metody, použít metodu ve třídě, instance
uvnitř třídy či rozšířit interface do dalších tříd.
Dokázal bys ke svým otázkám vymyslet příklady, z kterých by bylo
jasnější oč ti jde?
V tom je ta potíž, protože si sám nejsem jistý tím, jak přesně by to
mělo fungovat.
Zapomeňte tedy na původní otázky, to bude asi lepší Mám interface, implementuji jej
v nějaké třídě, a všechny její instance (díky dědičnosti z třídy
Object, která je nad všemi ostatními třídami a nechává je od ní dědit,
tedy i všechny instance, všech možných tříd balíčku) mohou metody
uvedené v interface používat. → tedy, mám interface Intro, třídu
Introimpl, která interface Intro implementuje. Otázka zní: Kde všude mohu
metody implementované v teto třídě použít ... pokud to chápu dobře, tak
je mohu použít ve všech třídách, které od této třídy dědí nebo od
kterých ona dědí → pomocí přetypování nebo genericity mohu pak
interface použít ve všech třídách, respektive pro všechny objekty. Pokud
to stále není jasné, pokuste se uvést co největší množství možných
použití interface (hlavně, kde všude je mohu použít)
PS: Ještě jedna otázka ... Pokud implementuju interface v jedne tride, tak
vsechny jeji instance (objekty) mohou tento interface pouzivat ... mohu
následně implementovat stejny interface i v jinych tridach, abych tak "naucil"
jejich objekty pouzivat interface, bez toho abych je znovu v techto tridach
implementoval → Trida1 implements Intro → v teto tride bude telo metod z
interface Intro a pak vytvorim dalsi tridu Trida2 implements Intro, ve ktere uz
tela metod nebudou, ale bude je moci pouzivat ?
Vím, že je to hrozně zmatené, ale protože jsem začátečník, nevím, jak
jednodušeji jednotněji podal :/
Ahoj,
ak trieda implementuje interface MUSI prepisat vsetky metody toho interface:
public class Trieda1 implements MojInterface {
public void interfaceMetoda1() {
....
}
public int interfaceMetoda2() {
...
return ...
}
}
public class Trieda2 implements MojInterface {
Trieda1 objektTriedy1 = new Trieda1();
// tiez treba prepisat metody
public void interfaceMetoda1(){}
public int interfaceMetoda2() {}
// mam tu referenciu na objekt Triedy 1 - mozem teda volat metody //definovane v Triede1
objektTriedy1.interfaceMetoda1();
}
Vyhodou je, ze kazda trieda moze implementovat interface vlastnym sposobom -
teda metody interfaceMetoda1() a interfaceMetoda2() mozu mat rozne funkcie,
rozny kod a rozne uplatnenie v kazdej z tried ktora implementuje interface.
Cez referenciu na objekty tried vies potom efektivne vyuzivat metody definovane
aj mimo tried, v ktorych ich vyzuivas.
Ztratil jsem se hned na začátku.
Mám interface - OK
implementuji jej v nějaké třídě - OK
a všechny její instance mohou metody uvedené v interface používat -
nerozumím
(díky dědičnosti z třídy Object...) - nerozumím
Děkuji Rastovi. Teď už to chápu lépe. Ještě jedna otázka .. Pokud budu chtít použít stejně metody z jednoho interface v dalších třídách, musím je v každé z těch tříd znovu implementovat, nebo existuje způsob, jak uvést jen odkaz na příslušné implementace ? Vím, že implementace interface se dědí spolu se třídou, ale je to nepraktické, protože dědit může třída jen z jediného předka → proto se snažím zjistit všechny způsoby jakými můžu používat interface. Díky za rady a trpělivost
Nie som si isty, ci uplne chapem tvoju otazku, ale skusim odpovedat.
Dajme tomu, ze Trieda A implementuje Interface X a teda musi prepisat (definovat telo - kod) vsetkych metod, ktore su v Interface deklarovane.
Potom ak Trieda B dedi od Triedy A, ale samotna neimplementuje Interface X (cize mas ju deklarovanu iba takto: class B extends A {...} ), tak B bude mat pristup k vsetkym metodam z A - k tym, ktore pochadzaju z Interface X, aj k tym, ktore si trieda A definuje navyse.
Priklad, ktory som uviedol v mojom predoslom prispevku, je mierne odlisny: Tam som ukazal situaciu, ze aj Trieda A, aj Trieda B implementuju Interface X a obe triedy si metody z X implementuju svojim vlastnym sposobom. Trieda B v tom priklade nededila od A, preto obsahovala referenciu na objekt triedy A, cez ktory moze pristupovat k metodam triedy A.
Celkovo tato tematika nie je az taka jednoducha. Chvilu to trva, kym to cele clovek spravne pochopi, takze zelam vela trpezlivosti
Zobrazeno 7 zpráv z 7.