5. Pokrocile OOP
Plan na cvicenie
Pokročilé princípy OOP
Na cvičeni si preštudujte prednášku 4 a prednášku 5Konkretne :
- 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ýstupPopulacia : 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ýstupCvič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