Rozšírenie príkladu z utorňajšieho cvičenia:

  1. Implementujte ďalšiu figúrku, napríklad strelca (public class Bishop extends AbstractChessPiece).
  2. Do triedy AbstractChessPiece pridajte deklaráciu abstraktnej metódy protected abstract void checkMove(int column, int row). Metódu volajte ako prvý príkaz v metóde AbstractChessPiece.move(int column, int row). Zistíte, že vám projekt nejde preložiť, v triedach Rook a Bishop totiž chýba implementácia metódy checkMove. Pretvorte metódu move (premenujte a upravte telo) na metódu checkMove – telo bude obsahovať len kontrolu správnosti ťahu, nie volanie super.move(column, row). Triedy Rook a Bishop nebudú prekrývať metódu AbstractChessPiece.move(int column, int row), budú obsahovať jedinú metódu, checkMove. Takto upravený kód by mal fungovať rovnako ako ten z cvičení – pri volaní move v triede Demo sa zavolá metóda z triedy AbstractChessPiece, ktorá požiada príslušného potomka o overenie, či ide o korektný ťah.
  3. Objekty sa porovnávajú volaním metódy equals, nie pomocou ==. Bližšie v príklade:
    public static void main(String[] args) {
        String s1 = new String("ahoj");
        String s2 = new String("ahoj");
        System.out.println(s1.equals(s2));
        System.out.println(s1 == s2);
    }
 
Keď metódu spustíte, iba prvé volanie vypíše true. Dôvodom je, že operátor == hovorí, či ide o dve referencie na jeden objekt. A to v prípade s1 a s2 neplatí, keďže vznikli rôznymi volaniami konštruktora. Keď chcete porovnávať reťazce prirodzeným spôsobom, čiže zhodu poradia znakov, použite metódu equals, ako je uvedené v príklade. Týmto spôsobom porovnávajte všetky objektové typy. Dobre si to pozrite a skúste trochu experimentovať, môže sa to objaviť na písomke!