Plan na cvicenie

Pokročilé princípy OOP

Na cvičeni si preštudujte prednášku 4 a prednášku 5
Konkretne :
  • dedenie (extends),
  • abstraktna trieda,
  • špecializácia a generalizácia,
  • viac-úrovňové dedenie
  • polymorfizmus
  • volanie rodičovského konštruktora (śuper())
  • metódy equals() a toString()

Uloha 1

Hlavna.java

Použijeme príklad z minulého cvičenia.
	   package main;
	   
       public class Hlavna {
			public static void main(String[] args) {
				System.out.println("Populacia : "+ Clovek.populacia);
				ArrayList<Clovek> ludia = new ArrayList<Clovek>();
				
				Clovek cviciaci = new Clovek("Maroš","Čavojský");
				ludia.add(cviciaci);
				Clovek studentka = new Clovek("Barbora","Krásna");
				ludia.add(studentka)
				Clovek student = new Clovek("Patrik","Športový");
                ludia.add(student);
				System.out.println("Populacia : "+ Clovek.populacia);
				
				for (Clovek c : ludia){
					System.out.println("Meno : " + c.getCeleMeno());
				}
				
			}
		}
		
    

Clovek.java

	   package triedy;
       public class Clovek {
		    public static int populacia = 0;
			private String meno;
			protected String priezvisko;
			
			public Clovek(String meno, String priezvisko){
				this.meno = meno;
				this.priezvisko = priezvisko;
				populacia++;
			}
			
			public String getMeno(){ return this.meno; }
			public String getPriezvisko() {return this.priezvisko; }
			public String getCeleMeno(){ return this.meno + " " + this.priezvisko; }
			
			public void setMeno(String meno){ this.meno = meno; }
			public void setPriezvisko(String priezvisko) { this.priezvisko = priezvisko; }			
			
			public static String zistiZivost(){ return "Žive"; }
		}
		
    

Uloha 2

Využite dedičnosť pri vytváraní ľudí. Triedu Clovek zmente na abstraktnu a vytvorte dve triedy Cviciaci a Student, ktoré budú od nej dediť. V tychto dedených triedach použite rodičovský konštruktor. V maine použite 1x triedu Cviciaci a 2x triedu Student. Vytvorené inštancie obdobným spôsobom vložte do kolekcie. Následne použite zdedené metódy na výpis celého mena v cykle for.

Uloha 3

Použitie polymorfizmu. Preťažte metódu getCeleMeno(), tak aby pred celym menom vracala buď "Cvičiaci" alebo "Študent" v závislosti od toho inštancie triedy.

	   package triedy;
       public class Student extends Clovek {
		    
			....
			
			@Override
			public String getCeleMeno() { 
				//return "Študent "+ getCeleMeno(); // je implementácia na tomto riadku správna ? prečo ? 
				//return "Študent "+ meno + " " + priezvisko; // je implementácia na tomto riadku správna ? prečo ?
				//return "Študent "+ getMeno()  + " " + priezvisko; // je implementácia na tomto riadku správna ? prečo ?
				//return "Študent "+ meno  + " " + getPriezvisko();	// je implementácia na tomto riadku správna ? prečo ?			
			}
	   }	
	
Ukážkový výstup
Populacia : 0
Populacia : 3
Meno : Cvičiaci Maroš Čavojský
Meno : Študent Barbora Krásna
Meno : Študent Patrik Športový

Uloha 4

Použitie equals(), hashCode() a toString(). Preťažte metódy equals(), hashCode() v triede Clovek a toString() v zdedených triedach. Dva objekty Clovek sú zhodné ak majú zhodné meno aj priezvisko. Metódu toString() implementujte, tak aby ju bolo možné použiť namiesto celeMeno().

       package triedy;
	   public abstract class Clovek {
		    
			....
			
			@Override
			public int hashCode() {
				....
				//return hash;
			}

			@Override
			public boolean equals(Object obj) {
				if (obj == null) {
					return false;
				}
				if ((obj instanceof Clovek) == false){
				   return false;
				}
				final Clovek other = (Clovek) obj;

				.....
		   }	
	
       package triedy;
	   public class Student {
	        .....
			@Override
			public String toString() {
				....
			}
    
		package main;
	   
		public class Hlavna {
			public static void main(String[] args) {
				ArrayList<Clovek> ludia = new ArrayList<Clovek>();
				
				Clovek cviciaci = new Cviciaci("Maroš","Čavojský");
				ludia.add(cviciaci);
				Clovek studentka = new Student("Barbora","Krásna");
				ludia.add(studentka)
				Clovek student = new Student("Patrik","Športový");
                ludia.add(student);
				Clovek cviciaca = new Cviciaci("Barbora","Krásna");
                ludia.add(cviciaca);
				
				 for (Clovek c1 : ludia) {
					for (Clovek c2 : ludia) {
						System.out.println(c1.toString() + " a " + c2.toString() + " : ZHODA "  + (c1.equals(c2) ? "Ano" : "Nie"));
					}
				}
				
				
			}
		}
	
Ukážkový výstup
	
Cvičiaci Maroš Čavojský a Cvičiaci Maroš Čavojský : ZHODA Ano
Cvičiaci Maroš Čavojský a Študent Barbora Krásna : ZHODA Nie
Cvičiaci Maroš Čavojský a Študent Patrik Športový : ZHODA Nie
Cvičiaci Maroš Čavojský a Cvičiaci Barbora Krásna : ZHODA Nie

Študent Barbora Krásna a Cvičiaci Maroš Čavojský : ZHODA Nie
Študent Barbora Krásna a Študent Barbora Krásna : ZHODA Ano
Študent Barbora Krásna a Študent Patrik Športový : ZHODA Nie
Študent Barbora Krásna a Cvičiaci Barbora Krásna : ZHODA Ano

Študent Patrik Športový a Cvičiaci Maroš Čavojský : ZHODA Nie
Študent Patrik Športový a Študent Barbora Krásna : ZHODA Nie
Študent Patrik Športový a Študent Patrik Športový : ZHODA Ano
Študent Patrik Športový a Cvičiaci Barbora Krásna : ZHODA Nie

Cvičiaci Barbora Krásna a Cvičiaci Maroš Čavojský : ZHODA Nie
Cvičiaci Barbora Krásna a Študent Barbora Krásna : ZHODA Ano
Cvičiaci Barbora Krásna a Študent Patrik Športový : ZHODA Nie
Cvičiaci Barbora Krásna a Cvičiaci Barbora Krásna : ZHODA Ano