Při vytvoření objektu je vždy volán některý konstruktor. V naší první ukázce je uveden jediný konstruktor, který nemá žádné parametry a jeho úkolem je nastavit výchozí hodnoty členských proměnných na implicitní hodnoty. Voláním tohoto konstruktoru vždy vytvoříme stejný obdelník s rozměry 200 x 100 umístěný na pozici (50, 50). Následující kód vložte do souboru, který pojmenujte Obdelnik.java
class Obdelnik { public int poziceX; public int poziceY; public int sirka; public int vyska; public Obdelnik() { // bezparametrický konstruktor this.poziceX = 50; this.poziceY = 50; this.sirka = 200; this.vyska = 100; } }
Třídu Obdelnik
bude využívat třída Kreslitko
, ve které nejprve vytvoříme pomocí bezparametrického konstruktoru jednu instanci třídy Obdelnik
(pojmenujeme ji třeba ob
) a potom ji nakreslíme. Následující kód vložte do souboru, který pojmenujte Kreslitko.java
.
import java.awt.*; import java.awt.event.*; public class Kreslitko extends Frame { Obdelnik ob = new Obdelnik(); // zde voláme bezparametrický konstruktor Platno pl = new Platno(); public Kreslitko() { super.setTitle("Konstruktory"); this.setSize(800, 600); this.add(pl, BorderLayout.CENTER); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(1); } }); } class Platno extends Canvas { public void paint(Graphics g) { g.setColor(Color.RED); g.fillRect(ob.poziceX, ob.poziceY, ob.sirka, ob.vyska); } } public static void main(String[] args) { new Kreslitko().setVisible(true); } }
Nyní do definice třídy Obdelnik
přidáme konstruktor s jedním parametrem. Následující kód doplňte do definice třídy Obdelnik
z předchozí ukázky.
public Obdelnik(int velikost) { this.poziceX = 50; // pozici ponecháme implicitně nastavenou na (50, 50) this.poziceY = 50; this.sirka = velikost; // šířka i výška obdélníku bude stejná (bude to čtverec) this.vyska = velikost; }
Ve třídě Kreslitko
vyzkoušíme volání výše uvedeného konstruktoru s jedním parametrem - vytvoříme čtverec o velikosti 100 x 100. Sami najděte, který řádek definice třídy Kreslitko
musíte změnit na následující tvar.
Obdelnik ob = new Obdelnik(100); // voláme konstruktor s jedním parametrem
Nyní do definice třídy Obdelnik
přidáme konstruktor se dvěma parametry. Následující kód doplňte do definice třídy Obdelnik
.
public Obdelnik(int sirka, int vyska) { this.poziceX = 50; // pozici ponecháme implicitně nastavenou na (50, 50) this.poziceY = 50; this.sirka = sirka; // parametr sirka this.vyska = vyska; // parametr vyska }
Ve třídě Kreslitko
vyzkoušíme volání výše uvedeného konstruktoru se dvěma parametry - vytvoříme obdélník o velikosti například 150 x 50. Sami najděte, který řádek definice třídy Kreslitko
musíte změnit na následující tvar.
Obdelnik ob = new Obdelnik(150, 50); // voláme konstruktor se dvěma parametry
Nyní do definice třídy Obdelnik
přidáme konstruktor se čtyřmi parametry. Následující kód doplňte do definice třídy Obdelnik
.
public Obdelnik(int poziceX, int poziceY, int sirka, int vyska) { this.poziceX = poziceX; this.poziceY = poziceY; this.sirka = sirka; this.vyska = vyska; }
Ve třídě Kreslitko
vyzkoušíme volání výše uvedeného konstruktoru se čtyřmi parametry - vytvoříme obdélník o velikosti například 200 x 100 umístěný na pozici (400, 300). Sami najděte, který řádek definice třídy Kreslitko
musíte změnit na následující tvar.
Obdelnik ob = new Obdelnik(400, 300, 200, 100); // voláme konstruktor se čtyřmi parametry
V definici třídy Obdelnik
již máme jeden konstruktor se dvěma parametry. Nyní přidáme další konstruktor se dvěma parametry. Ale pozor, to je možné jedině v případě, že nově vložený konstruktor bude mít alespoň jeden parametr jiné typu (ne pouze typ int
jako původní kontruktor). Proto přidáme další členskou proměnnou barva
. Následující řádek vložte hned za řádky s deklaracemi členských proměnných třídy Obdelnik
(konkrétně za deklaraci proměnné vyska
).
public Color barva; // nová proměnná barva
Proměnná barva
bude objektem třídy Color
, což je třída, která je definovaná v knihovně AWT. Proto ještě musíme na první řádek souboru Obdelnik.java
přidat kód pro import knihovny AWT.
import java.awt.*; // zpřístupnění knihovny AWT
Nyní již můžeme do definice třídy Obdelnik
bez obav přidat další konstruktor se dvěma parametry.
public Obdelnik(int velikost, Color barva) { this.poziceX = 50; // pozici ponecháme implicitně nastavenou na (50, 50) this.poziceY = 50; this.sirka = velikost; // parametr velikost se použije pro šířku i výšku obdélníku this.vyska = velikost; this.barva = barva; // parametr barva slouží k nastavení libovolné barvy obdélníku }
Ve třídě kreslitko vyzkoušíme volání výše uvedeného konstruktoru se dvěma parametry - vytvoříme zelený čtverec o velikosti 100 x 100. Sami najděte, který řádek definice třídy Kreslitko
musíte změnit na následující tvar.
Obdelnik ob = new Obdelnik(100, Color.GREEN); // voláme konstruktor se dvěma parametry
Aby se barva nastavená obdélníku skutečně použila při kreslení, musíme ještě provést drobnou změnu v metodě Paint
třídy Platno
. Určitě sami objevíte, na kterém řádku by měla být provedena následující změna.
g.setColor(ob.barva); // změníme barvu pera
V předchozí ukázce si můžete všimnout jednoho ze základních principů objektového programování - instance ob
třídy Obdelnik
si s sebou "nese" informace potřebné pro své nakreslení (pozici, rozměry i barvu). Tyto informace se použijí v metodě Paint
třídy Platno
.
Obdelnik
jednoparametrický konstruktor umožňující pouze nastavení barvy obdélníku.Obdelnik
tříparametrický konstruktor umožňující nastavení šířky, výšky a barvy obdélníku.Obdelnik
dvouparametrický konstruktor umožňující nastavení proměnných poziceX
a poziceY
a vysvětlete chybu, kterou bude hlásit překladač.Kreslítko
další instance objektu Obdelnik
(jednoduše řečeno, zobrazte na plátně další obdélníky). Při vytváření těchto instancí využijte různé konstruktory, které jste vytvořili v předchozích cvičeníchKruh
(kód této třídy vložte do samostatného souboru). Tato třída bude mít pro začátek 3 členské proměnné typu int
(poziceX
, poziceY
, poloměr
). V definici této třídy uveďte jednoparametrický konstruktor umožňující nastavit pouze poloměr kružnice, dále dvouparametrický konstruktor umožňující nastavit pouze proměnné poziceX
, poziceY
a konečně tříparametrický konstruktor, umožňující nastavit všechny tři členské proměnné.Kruh
doplňte ještě členskou proměnnou barva
(instaci třídy Color
) a dále tříparametrický konstruktor umožňující nastavit proměnné poziceX
, poziceY
a barva
.Pes
. Kromě konstruktoru uvedného v ukázce vložte do definice třídy Pes
i jednoparametrický konstruktor umožnující nastavit věk psa, dále dvouparametrický konstruktor umožnující nastavit věk a rasu psa a konečně tříparametrický konstruktor, umožňující nastavit věk, výšku a rasu psa. Potom si pomocí těchto konstruktorů zkuste vytvořit několik různých instancí třídy Pes
(pojmenujte je například Alik, Rex, Zeryk, atd.).