Java-konstruktor this – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java-konstruktor this – Java – Fórum – Programujte.comJava-konstruktor this – Java – Fórum – Programujte.com

 

17. 9. 2013   #1
-
0
-

Zdravím, začínáme se ve škole učit javu a jako první konstruktor this. Chci se zeptat, k čemu ten konstruktor vůbec je. Hledal jsem to různě na internetu a nikde nic, co bych chápal. Uvedu zde příklad, mohl byste mi ho někdo vysvětlit? Děkuji za odpověď

public class Strom
{
public Strom()
{
this(0,0);
}
public Strom(int x, int y)
{
this(x,y,100,150);
}
public Strom(int x, int y, int sirka, int vyska)
{
new Elipsa(x,y,sirka,2*vyska/3,Barva.ZELENA);
new Obdelnik(x+9*sirka/20,y+2*vyska/3, sirka/10,
vyska/3, Barva.HNEDA);
}
}

Nahlásit jako SPAM
IP: 77.48.106.–
KIIV
~ Moderátor
+43
God of flame
17. 9. 2013   #2
-
0
-

this neni konstruktor   "this"  je "odkaz" na sebe sama (a da se s tim vyvolat jiny konstruktor nez ve kterem zrovna jses). U dedeni je pak jeste krom this i super (tim se da volat konstruktor nadrazene tridy, ale tady to samozrejme neni nutne)

Jinak tam mas tri konstruktory - jeden bez parametru a druhy ma parametry dva a treti ma parametry 4 a vicemene je to ukazka jak delat "defaultni" hodnoty v jave... (jelikoz to neumi prakticky nic, na co by mohl byt C++kar nejak zvyklej)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
goddard
~ Anonymní uživatel
41 příspěvků
17. 9. 2013   #3
-
0
-

dle prikladu je to z knizky od pecinovskyho - myslime objektove v jazyce java. ucitel ti to urcite rad vysvetli (v te knizce je to napsany taky hezky) ;)

Nahlásit jako SPAM
IP: 94.112.88.–
18. 9. 2013   #4
-
0
-

#2 KIIV
Stále nějak nechápu využití toho this. Co znamená třeba zápis this(x,y,100,150)  a proč se u prvního this napsalo (0,0)?

Nahlásit jako SPAM
IP: 77.48.106.–
KIIV
~ Moderátor
+43
God of flame
18. 9. 2013   #5
-
0
-

kdyz zavolas  new Strom();

tak se zacne konstruktorem   Strom() { ... }

ten pak zavola pomoci this konstruktor  Strom(0,0)

a ten pak zase dal vola pomoci this konstruktor  Strom(0,0,100,150)  (uz sem nahradil x a y za ty hodnoty)

ten pak neco z tech parametru vykouzli

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
lukber0
Newbie
18. 9. 2013   #6
-
0
-

Připojen obrázek.

Pomocí this se ve třídě odkazuješ na atributy té konkrétní třídy (this.x=x).  Pokud by jsi napsal x=x tak by překladač nevěděl jestli chceš do x z parametru konstruktoru vložit hodnotu x atributu třídy, nebo obráceně, nebo dokonce jen do x ukládáš zase jen tu samou hodnotu x ... Tím že řekneš this.x = x tak rozlišíš parametr od atributu.

Konstrukci this je možné také využít v případě, kdy třída má několik konstruktorů a implementace (přiřazení parametrů hodnot do atributů třídy atd.) je napsána pouze v jednom. Pomocí this se obchází omezení, že není možné volat konstruktor z konstruktoru tak jako kdyby jsi volal jakoukoli libovolnou metodu třídy. Konstruktor, který se zavolá voláním přes this(...) je dán počtem a typem parametrů. 

Nahlásit jako SPAM
IP: 193.85.250.–
lukber0
Newbie
18. 9. 2013   #7
-
0
-

   

Připojen obrázek.


Někdo ve svém programu bude chtít použít tvou třídu Strom. Vytvořit instanci třídy strom může pomocí tří konstruktorů které vystavuješ:

  1. Strom() - bez zadaných souřadnic x a y
  2. Strom(int x, int y) - včetně zadání souřadnic x a y
  3. Strom(int x, int y, int sirka, int vyska) - stejne jako 2. + rozšířené o šířku a výšku

Pokud někdo zavolá new Strom() tak uvnitř tohoto konstruktru se přes this(0,0) volá konstruktor Strom(int x, int y) kde se do parametru x předá hodnota 0 a do parametru y předá také hodnota 0. Uvnitř konstruktoru Strom(int x, int y) se pomocí this(x,y,100,150) volá konstruktor Strom(int x, int y, int sirka, int vyska) kde se do parametrů x předá 0, y předá 0, sirka předá 100 a do vyska předá 150.

V podstatě tímto způsobem říkáš jaké budou defaultní hodnoty.

Nahlásit jako SPAM
IP: 193.85.250.–
21. 9. 2013   #8
-
0
-

#7 lukber
#7 lukber
takže this mi má ulehčit práci? že pokaždé nemusím vypisovat hodnoty?

Nahlásit jako SPAM
IP: 77.48.106.–
lukber0
Newbie
22. 9. 2013   #9
-
0
-

#8 diabolus99
this ti žádnou práci neulehčuje, ale možná jen nerozumím otázce.

Nahlásit jako SPAM
IP: 94.112.235.–
Flowy0
Věrný člen
22. 9. 2013   #10
-
0
-

#8 diabolus99
tak ako mas odkaz na triedu Math alebo Scanner tak isto mozes vytvorit vlastnu triedu ... kym vytvaras vlastnu static triedu (nazvyme ju Math) tak ti nerobi problem ak chces zavolat nejaku metodu ktora je obsiahnuta v tejto triede (bud napises priamu cestu ako Math.metoda ... alebo ju proste zavolas a JVM ju automaticky najde v aktualnej triede) ... problem moze nastat ak tvoja trieda nieje static ... vtedy nemozes zavolat na triedu pretoze moze mat viac verzii ... stale mozes zavolat nazov objektu v triede a JVM si s tym poradi ... ale tvoj objekt moze mat rovnake meno ako nejaky static objekt ktory je tiez dostupny (predstavme si ze mas premennu index v prostredi a oznacil si ju static ... ale ty potrebujes v non-static triede vytvorit premennu index ktora bude vlastna v kazdej verzii danej triedy) ... jediny sposob ako sa dostanes k vlastnemu objektu je ze ho oznacis ako this.objekt

ps: ak som si pomylil poradie ako vyhladava JVM tak ma prosim opravte ... na vyzname to ale nic nemeni

Nahlásit jako SPAM
IP: 178.41.144.–
https://github.com/Flowy
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 45 hostů

Podobná vlákna

Konstruktor — založil el

Konstruktor na co? — založil Pavel

Konstruktor — založil Dagi

Konstruktor v OOP — založil Facedown

Explicitni konstruktor — založil fnenks

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý