Nech su definovane triedy Pozica a Trojuholnik (trojuholnik je definovany poziciami jeho vrcholov) a metoda main public class Pozicia implements Cloneable{ private int x; private int y; public Pozicia(int x, int y) { this.x = x; this.y = y; } public int dajX() { return x; } public int dajY() { return y; } public void nastav(Pozicia pozicia) { this.x = pozicia.x; this.y = pozicia.y; } @Override protected Pozicia clone() throws CloneNotSupportedException { return (Pozicia) super.clone(); } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Pozicia other = (Pozicia) obj; if (this.x != other.x) { return false; } if (this.y != other.y) { return false; } return true; } @Override public int hashCode() { int hash = 7; hash = 41 * hash + this.x; hash = 41 * hash + this.y; return hash; } } public class Trojuholnik { private Pozicia vrcholA; private Pozicia vrcholB; private Pozicia vrcholC; public Trojuholnik(Pozicia vrcholA, Pozicia vrcholB, Pozicia vrcholC) { this.vrcholA = new Pozicia(vrcholA.dajX(), vrcholA.dajY()); this.vrcholB = new Pozicia(vrcholA.dajX(), vrcholA.dajY()); this.vrcholC = new Pozicia(vrcholA.dajX(), vrcholA.dajY()); } public void nastavVrcholA(Pozicia vrcholA) { this.vrcholA.nastav(vrcholA); } public void nastavVrcholB(Pozicia vrcholB) { this.vrcholB.nastav(vrcholB); } public void nastavVrcholC(Pozicia vrcholC) { this.vrcholC.nastav(vrcholC); } } public static void main(String[] args) throws CloneNotSupportedException { Trojuholnik t1 = new Trojuholnik(new Pozicia(1, 1), new Pozicia(2, 1), new Pozicia(2,2)); Trojuholnik t2 = t1.clone(); System.out.println(t1.equals(t2)); //vypise true System.out.println(t1.hashCode() + ", " + t2.hashCode()); //vypise rovnake hodnoty t1.nastavVrcholA(new Pozicia(1, 2)); System.out.println(t1.equals(t2)); //vypise false System.out.println(t1.hashCode() + ", " + t2.hashCode()); //vypise s velkou pravdepodobnostou rozne hodnoty } a) Do triedy Trojuholnik doplne metodu clone, ktora vytvori hlboku kopiu b) Do triedy Trojuholnik doplne metody equals a hashCode -------------------------------------------------------------------------------- Co vratia nasledujuce volania? Objects.equals(null, new Object()) Objects.equals(null, null) Objects.hashCode(null) -------------------------------------------------------------------------------- Nech su definovane triedy a metoda main. Vypiste nazov triedy vytvoreneho objektu pouzitim getClass class A { } class B extends A { } class C extends A { } public static void main(String[] args) { //A a = new A(); A a = new B(); //A a = new C(); //vypiste nazov triedy objektu a pouzitim getClass } -------------------------------------------------------------------------------- Nech je definovany enumeracny typ public enum Direction { RIGHT, LEFT, UP, DOWN } a) Vypiste vsetky konstanty enumeracneho typu v cykle b) Doplnte vypis o poradie v ktorom je enumeracna konstanca definovana (prva moze mat cislo nula) c) Doplnte atribut a konstruktor, prekryte metodu toString() tak, aby predchadzajuci vypis vypisal konstanty malymi písmenami. Zaciatok definicie bude: public enum Direction { RIGHT("right"), LEFT("left"), UP("up"), DOWN("down"); //nezabudnut pridat bodkociarku //dalsie implementacia } d) Definujte staticku metodu v enumeracnom type Direction, ktora vrati nahodnu konstantu typu Direction System.out.println(Direction.getRandom()); //nahodne vrati jednu s konstant e) Definujte instancne metody ktore vzdy vratia opacny smer System.out.println(Direction.LEFT.opposite() == Direction.RIGHT); //musi vypisat true System.out.println(Direction.RIGHT.opposite() == Direction.LEFT); //musi vypisat true System.out.println(Direction.UP.opposite() == Direction.DOWN); //musi vypisat true System.out.println(Direction.DOWN.opposite() == Direction.UP); //musi vypisat true