Nech su definovane triedy public class Zviera { public String dajRetazec() { return "zviera"; } } public class Kon extends Zviera{ @Override public String dajRetazec() { return "kon"; } } public class Mustang extends Kon{ } public class Pes extends Zviera{ @Override public String dajRetazec() { return "pes"; } } a) Nakreslite diagram tychto tried. b) Co vytlaci metoda main? public static void main(String[] args) { Zviera zviera1 = new Zviera(); Kon kon = new Kon(); Mustang mustang = new Mustang(); Zviera zviera2 = mustang; System.out.println(zviera1.dajRetazec()); System.out.println(kon.dajRetazec()); System.out.println(mustang.dajRetazec()); System.out.println(zviera2.dajRetazec()); System.out.println(zviera1 instanceof Zviera); System.out.println(mustang instanceof Zviera); System.out.println(zviera2 instanceof Mustang); Zviera zviera3 = new Pes(); Kon kon3 = (Kon) zviera2; Kon kon4 = (Kon) zviera3; } c) Pridajte do metody main kod: Zviera zviera3 = new Pes(); Kon kon3 = zviera2; Kon kon4 = zviera3; Opravte ho aby bol kompilovatelny. Otestujte funkcnost programu (preco nastala chyba po spusteni?). -------------------------------------------------------------------------------- Nech su definovane triedy public class A { pubilc A(int parameter1, int paramter 2) { } } public class B { } Preco nie je kod kompilovatelny? (Trieda B nema explicitne uvedeny konstruktor. Konstruktor podtriedy vzdy musi zavolat konstruktor nadtriedy. Ako vyzera automaticky doplneny konstruktor v triede B a v nom volanie konstruktora nadtriedy? Existuje volany konstruktor v nadtriede?) -------------------------------------------------------------------------------- Nech su definované triedy a metoda main: public class Zoznam { private int[] data; public Zoznam(int capacita) { data = new int[capacita]; } public void nastav(int index, int hodnota) { data[index] = hodnota; } public int dajHodnotu(int index) { return data[index]; } public int dajDlzku() { return data.length; } } public class A { private int index; public A() { reset(); } public void reset() { index = 0; System.out.println("A.reset()"); } } public class B extends A{ private Zoznam zoznam; public B() { zoznam = new Zoznam(10); reset(); } @Override public void reset() { super.reset(); for(int i = 0; i < zoznam.dajDlzku(); i ++) { zoznam.nastav(i, i+1); } System.out.println("B.reset()"); } } public static void main(String[] args) { B b = new B(); } Pri vytvarani instancie triedy B vznikne chyba NullPointerException. Opravte program tak, aby v triedach A aj B zostali prekrytelne metody reset(). -------------------------------------------------------------------------------- Nech su definovane triedy public class Nadtrieda { //vstupna podmienka: parametre musia byt nezaporne public void metoda(int a, int b) { assert (a >= 0 && b >= 0) : "vstupne argumenty nesplnaju vstupnu podmienku"; //implementacia } } public class Podtrieda1 extends Nadtrieda{ //vstupna podmienka: parameter a musi byt nezaporny @Override public void metoda(int a, int b) { assert(a >= 0) : "vstupne argumenty nesplnaju vstupnu podmienku"; } } public class Podtrieda2 extends Nadtrieda { //vstupna podmienka parameter a musi byt z intervalu <10, 20> @Override public void metoda(int a, int b) { assert( a >= 10 && a <= 20) : "vstupne argumenty nesplnaju vstupnu podmienku"; //implementacia } } public class Test { public static void main(String[] args) { Nadtrieda n = new Nadtrieda(); Podtrieda1 p1 = new Podtrieda1(); Podtrieda2 p2 = new Podtrieda2(); pouzitie(n); //test pouzitia instancie } private static void pouzitie(Nadtrieda objekt) { for(int a = 0; a < 50; a ++) { for(int b = 0; b < 50; b ++) { objekt.metoda(a, b); } } } } Instancie ktorych podtried mozeme pouzit vsade tam, kde je mozne pouzita aj instancie nadtriedy (nie len ako argument metody pouzitie)?