Bezparametrický konstruktor

Třída Obdelnik

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řída Kreslitko

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);
  }
}

Konstruktor s jedním parametrem

Třída Obdelnik

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;                 
  }         

Třída Kreslitko

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      

Konstruktor se dvěma parametry

Třída Obdelnik

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
  }         

Třída Kreslitko

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      

Konstruktor se čtyřmi parametry

Třída Obdelnik

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;                  
  }         

Třída Kreslitko

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      

Konstruktor s parametry jiného typu

Třída Obdelnik

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
}         

Třída Kreslitko

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

Poznámka

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.

Cvičení

  1. Doplňte do třídy Obdelnik jednoparametrický konstruktor umožňující pouze nastavení barvy obdélníku.
  2. Doplňte do třídy Obdelnik tříparametrický konstruktor umožňující nastavení šířky, výšky a barvy obdélníku.
  3. Pokuste se doplnit do třídy Obdelnik dvouparametrický konstruktor umožňující nastavení proměnných poziceX a poziceY a vysvětlete chybu, kterou bude hlásit překladač.
  4. Doplňte do třídy 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ích
  5. Vytvořte novou třídu Kruh (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é.
  6. Do třídy 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.
  7. Bonus: Podívejte se na na YouTube na hezký video tutoriál Konstruktor a zkuste si popsaným způsobem vytvořit třídu 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.).