Objektum Orientált Programozás 6. JAVA öröklődés 30/1B IT MAN B IT v: 2016.03.16 MAN
Feladatok Órai egyéni feladat (T: kb. 30 perc) Készítsen egy osztályt (Ember), melyben emberek nevét, magasságát és súlyát tudja tárolni. Legyen konstruktora, legyenek az adattagokat kezelő metódusai. Definiálja felül a tostring() metódusát, mely így az ember nevét, magasságát, súlyát adja vissza. Készítsen egy metódust (Magasabb), mely két Ember-t kap paraméterül, és visszaadja a magasabb Ember-t. Készítsen egy metódust (Konnyebb), mely kap két súlyt (számadatot), és ha az első kisebb, igaz értéket ad vissza, egyébként hamisat. Készítsen egy futtatható osztályt (Emberek), melyben beolvassa N darab ember adatait. - Írja ki a legmagasabb ember adatait. - Írja ki a legnehezebb ember adatait. 30/2 B IT MAN
Ember osztály Ember.java public class Ember { private String nev; private int magassag; private int suly; public Ember(String nev, int magassag, int suly){ this.nev = nev; this.magassag = magassag; this.suly = suly; public String tostring() { return nev + "-" + magassag + "-" + suly; 30/3 B IT MAN
Ember osztály Ember.java public int getsuly(){ return suly; public static Ember Magasabb(Ember a, Ember b){ if (a.magassag > b.magassag) return a; else return b; public static boolean Konnyebb (int a, int b){ return a < b; 30/4 B IT MAN
Emberek osztály Emberek.java import java.util.scanner; public class Emberek { public static void main(string[] args) { Scanner sc = new Scanner(System.in); System.out.println("Emberek száma: "); String s1 = sc.nextline(); int N = Integer.parseInt(s1); Ember[] E = new Ember[N]; String nev, s2; int suly, magassag; for (int i=0; i<n; i++) { System.out.println(i+". ember neve: "); nev = sc.nextline(); System.out.println(i+". ember magassága: "); s1 = sc.nextline(); System.out.println(i+". ember súlya: "); s2 = sc.nextline(); 30/5 B IT MAN
Emberek osztály Emberek.java magassag = Integer.parseInt(s1); suly = Integer.parseInt(s2); E[i] = new Ember(nev, magassag, suly); Ember legmagasabb = E[0]; for (int i = 1; i < N; i++) legmagasabb = Ember.Magasabb(E[i],legmagasabb ); System.out.println("A legmagasabb: " + legmagasabb.tostring()); Ember legnehezebb = E[0]; for (int i = 1; i < N; i++) if (!Ember.Konnyebb(E[i].getSuly(),legnehezebb.getSuly())) legnehezebb = E[i]; System.out.println("A legnehezebb: " + legnehezebb.tostring()); 30/6 B IT MAN
Feladatok 1. Készítsen java nyelvű osztályt (arus.aru) egy áru modellezésére - legyen név, nettó ár (egész), áfakulcs (egész, százalék) adata - legyen konstruktora, amely mindhárom adata megadásával inicializálja az adatokat - legyen metódusa, amely visszaadja a bruttóárat (egész, kerekítve) - legyen metódusa, amely egy stringbe összefűzve vissza adja a nevet és a bruttó árat. (Definiálja felül az Object osztálybeli tostring metódust!) - legyen metódusa, amely paraméterben megadott százalék értékkel növeli a nettó árat. - legyen metódusa, amely 1 ad ha az aru drágább (buttóár), mint egy paraméterben kapott, 0-t ad, ha egyforma árúak, és -1-t ad ha a paraméterben kapott a drágább. 30/7 B IT MAN
arus.aru osztály, adattagok: név, nettoar, afakulcs Konstruktor: 3 értékkel inicializál Metódus: tostring() Aru.java package arus; public class Aru { private String nev; private int nettoar; private int afakulcs; public Aru(String nev, int nettoar, int afakulcs) { this.nev = nev; this.nettoar = nettoar; this.afakulcs = afakulcs; @Override public String tostring() { return nev + ", bruttó ár: " + bruttoar(); 30/8 B IT MAN
Metódus: aratemel(szazalék) Metódus: hasonlit(másik Aru) Metódus: bruttoar() Aru.java public void aratemel(int szazalek) { this.nettoar += Math.round(this.nettoAr * szazalek/100.0); public int hasonlit(aru masik) { int ar = this.bruttoar(); int masikar = masik.bruttoar(); if (ar > masikar) return 1; if (masikar > ar) return -1; return 0; public int bruttoar() { return (int)math.round(this.nettoar * (1 + this.afakulcs/100.0)); 30/9 B IT MAN
Feladatok Készítsen egy arus.kenyer osztályt, amely az Aru leszármazottja - legyen mennyiség (valós, pl. 0.75) adata - legyen konstruktura, amely négy paraméterben kapott adattal inicializálja az objektumot - legyen felüldefiniálva a String-et visszaadó metódusa úgy, hogy az ősbelihez képest fűzze még hozzá az egységárat (bruttóár/mennyiség). - legyen metódusa, amely visszaadja a mennyiséget. - legyen osztályszintű metódusa, amely igazat ad, ha paraméterként kapott két Kenyer közül az elsőnek nagyobb az egységára. 30/10 B IT MAN
Öröklődés Eclipse-ben 30/11 B IT MAN
Aru arus.kenyer osztály, adattagok: mennyiség Konstruktor: 4 értékkel inicializál Metódus: tostring(), getmennyiség(), elsőnagyobbe(kenyér A,B) package arus; public class Kenyer extends Aru { private double mennyiseg; public Kenyer(String nev, int nettoar, int afakulcs, double mennyiseg) { super(nev, nettoar, afakulcs); this.mennyiseg = mennyiseg; @Override public String tostring() { return super.tostring() + ", egységár: " + egysegar(); public double getmennyiseg() { return mennyiseg; public static boolean elsonagyobbe(kenyer a, Kenyer b) { return a.egysegar() > b.egysegar(); private double egysegar() { return this.bruttoar()/mennyiseg; 30/12 B IT MAN Kenyer.java
Feladatok Készítsen egy arus.futo.aruproba futtatható osztályt, amelyben létrehoz egy Aru és egy Kenyer objektumot tetszőleges adatokkal. Kiírja az adataikat, kiírja a drágábbat. Hozzon létre még egy Kenyer típusú objektumot, de a referenciáját egy Aru típusú változóba tárolja (neve: aru2). Próbálja ki, hogy az "aru2" referenciával, mit ad a String-et visszaadó metódusa, megtudja-e hívni ezzen a referencián keresztül a mennyiséget visszaadó metódusát. Hozzon létre még egy Kenyer példányt (neve: keny2) és az "aru2" referenciával hivatkozott másik Kenyerrel összehasonlítva a nagyobb egységárút kell kiírni (konvertálásra lesz szükség). 30/13 B IT MAN
Osztály importálása Eclipse-ben Source \ Organize Imports 30/14 B IT MAN
arus.futo.aruproba osztály, Aru és Kenyér példányosítás, drágábbik kiírása package arus.futo; import arus.aru; import arus.kenyer; public class AruProba { public static void main(string[] args) { Aru aru1 = new Aru("Naptár", 140, 27); System.out.println(aru1.toString()); Kenyer k1 = new Kenyer("Miskolci fehér", 150, 10, 0.75); System.out.println(k1.toString()); Szam.java System.out.print("A drágább: "); if (aru1.hasonlit(k1) == 1) System.out.println(aru1.toString()); else System.out.println(k1.toString()); 30/15 B IT MAN
arus.futo.aruproba osztály, Aru és Kenyér példányosítás, drágábbik kiírása Konzol Naptár, bruttó ár: 178 Miskolci fehér, bruttó ár: 165, egységár: 220.0 A drágább: Naptár, bruttó ár: 178 30/16 B IT MAN
arus.futo.aruproba osztály, Aru és Kenyér példányosítás, Kenyér példányosítás Aru referenciával, Kenyér példányosítás, Nagyobb egységárú kenyér kiírása Szam.java package arus.futo; import arus.aru; import arus.kenyer; public class AruProba { public static void main(string[] args) { Aru aru1 = new Aru("Naptár", 140, 27); Kenyer k1 = new Kenyer("Miskolci fehér", 150, 10, 0.75); Aru aru2 = new Kenyer("Barna", 180, 10, 0.5); System.out.println(aru2.toString()); //System.out.println(aru2.getMennyiseg()); Kenyer k2 = new Kenyer("Rozsos", 200, 10, 0.5); System.out.println(k2.toString()); 30/17 B IT MAN
arus.futo.aruproba osztály, Aru és Kenyér példányosítás, Kenyér példányosítás Aru referenciával, Kenyér példányosítás, Nagyobb egységárú kenyér kiírása Konzol Naptár, bruttó ár: 178 Miskolci fehér, bruttó ár: 165, egységár: 220.0 Barna, bruttó ár: 198, egységár: 396.0 Rozsos, bruttó ár: 220, egységár: 440.0 30/18 B IT MAN
arus.futo.aruproba osztály, Aru és Kenyér példányosítás, Kenyér példányosítás Aru referenciával, Kenyér példányosítás, Nagyobb egységárú kenyér kiírása package arus.futo; import arus.aru; import arus.kenyer; public class AruProba { public static void main(string[] args) { Aru aru1 = new Aru("Naptár", 140, 27); Kenyer k1 = new Kenyer("Miskolci fehér", 150, 10, 0.75); Szam.java Aru aru2 = new Kenyer("Barna", 180, 10, 0.5); Kenyer k2 = new Kenyer("Rozsos", 200, 10, 0.5); Kenyer nagyobbearu; if (Kenyer.elsoNagyobbE(k2, (Kenyer)aru2)) nagyobbearu = k2; else nagyobbearu = (Kenyer)aru2; System.out.println("A nagyobb egységárú kenyér: " + nagyobbearu.tostring()); 30/19 B IT MAN
arus.futo.aruproba osztály, Aru és Kenyér példányosítás, Kenyér példányosítás Aru referenciával, Kenyér példányosítás, Nagyobb egységárú kenyér kiírása Konzol Naptár, bruttó ár: 178 Miskolci fehér, bruttó ár: 165, egységár: 220.0 Barna, bruttó ár: 198, egységár: 396.0 Rozsos, bruttó ár: 220, egységár: 440.0 A nagyobb egységárú kenyér: Rozsos, bruttó ár: 220, egységár: 440.0 30/20 B IT MAN
Feladatok 2. Készítsen java nyelvű osztályt ujkonyves.konyvstilussal néven a korábbi konyves.alap.konyv osztály kiterjesztésére. - legyen még stílus (szöveg) adata - legyen konstruktora, amely minden adatát paraméterben kapott adatokkal inicializálja. - legyen metódusa, amely visszaadja a stílust - legyen metódusa, amely felüldefiniálva a String-et visszadó metódus, úgy hogy az ősbeli Stringhez még fűzze hozzá a stílust is. Készítsen egy futtatható osztályt az ujkonyves.futo csomagba, amelyben beolvas n darab konyvet egy tömbbe és kiírja a legkisebb oldalárút valamint a "Scifi" stílusú könyveket. (A String-ek egyezésének vizsgálatára használja a String osztály következő metódusát: boolean equalsignorecase(string anotherstring) Compares this String to another String, ignoring case considerations.) 30/21 B IT MAN
Konyv osztály, konyves.alap csomagba, adattagok: író, cím, oldalszám, ár Alap konstruktor Metódus: tostring könyv adatok Konyv.java package konyves.alap; public class Konyv { private String iro; private String cim; private int oldal; private int ar; public Konyv(String iro, String cim, int oldal, int ar) { this.iro = iro; this.cim = cim; this.oldal = oldal; this.ar = ar; @Override public String tostring() { return "Konyv [iro="+iro+", cim="+cim+", oldal="+ oldal+", ar="+ar+"]"; 30/22 B IT MAN
Metódus: dragabbe Metódus: oldalar Metódus: hosszabb Konyv.java public boolean dragabb(konyv masik) { return this.oldalar() > masik.oldalar(); private double oldalar() { return (double)this.ar/this.oldal; public static Konyv hosszabb(konyv a, Konyv b) { if (a.oldal > b.oldal) return a; return b; 30/23 B IT MAN
KonyvStilussal létrehozása Eclipse-ben 30/24 B IT MAN
Konyv ukjonyves.konyvstilussal osztály, stilus adattag, Alap konstruktor, Metódusok: getstílus(), tostring() KonyvStilussal.java package ujkonyves; import konyves.alap.konyv; public class KonyvStilussal extends Konyv { private String stilus; public KonyvStilussal(String iro, String cim, int oldal, int ar, String stilus) { super(iro, cim, oldal, ar); this.stilus = stilus; public String getstilus() { return stilus; @Override public String tostring() { return super.tostring() + ", Stílusa=" + this.stilus; 30/25 B IT MAN
KonyvesProba futtatható osztály a ujkonyves.futo nevű csomagba, Beolvasni N darab könyvet egy tömbbe, Kiírni legkisebb oldalárút, és a Scifi könyveket (equalsignorecase-t használva) KonyvesProba.java package ujkonyves.futo; import ujkonyves.konyvstilussal; import java.util.scanner; public class KonyvesProba { public static void main(string[] args) { Scanner sc = new Scanner(System.in); System.out.println("Könyvek száma: "); String s1 = sc.nextline(); int N = Integer.parseInt(s1); KonyvStilussal[] K = new KonyvStilussal[N]; String iro, cim, s2, stil; int oldal, ar; 30/26 B IT MAN
KonyvesProba futtatható osztály a ujkonyves.futo nevű csomagba, Beolvasni N darab könyvet egy tömbbe, Kiírni legkisebb oldalárút, és a Scifi könyveket (equalsignorecase-t használva) KonyvesProba.java for (int i=0; i<n; i++) { System.out.println(i+". könyv írójának neve: "); iro = sc.nextline(); System.out.println(i+". könyv címe: "); cim = sc.nextline(); System.out.println(i+". könyv oldalszáma: "); s1 = sc.nextline(); oldal = Integer.parseInt(s1); System.out.println(i+". könyv ára: "); s2 = sc.nextline(); ar = Integer.parseInt(s2); System.out.println(i+". könyv stílusa: "); stil = sc.nextline(); K[i] = new KonyvStilussal(iro, cim, oldal, ar, stil); 30/27 B IT MAN
KonyvesProba futtatható osztály a ujkonyves.futo nevű csomagba, Beolvasni N darab könyvet egy tömbbe, Kiírni legkisebb oldalárút, és a Scifi könyveket (equalsignorecase-t használva) KonyvesProba.java KonyvStilussal legolcsobb = K[0]; for (int j = 1; j < N; j++) if (legolcsobb.dragabb(k[j])) legolcsobb = K[j]; System.out.println("A legolcsóbb: "+legolcsobb.tostring()); System.out.println("SciFi könyvek: "); for (int j = 0; j < N; j++) if (K[j].getStilus().equalsIgnoreCase("scifi")) System.out.println(K[j].toString()); 30/28 B IT MAN
KonyvesProba futtatható osztály a ujkonyves.futo nevű csomagba, Beolvasni N darab könyvet egy tömbbe, Kiírni legkisebb oldalárút, és a Scifi könyveket (equalsignorecase-t használva) Konzol Könyvek száma: 3 0. könyv írójának neve: aaa 0. könyv címe: aaa 0. könyv oldalszáma: 297 0. könyv ára: 1899 0. könyv stílusa: scifi 1. könyv írójának neve: bbb 1. könyv címe: bbb 1. könyv oldalszáma: 372 1. könyv ára: 1700 1. könyv stílusa: matek 2. könyv írójának neve: ccc 2. könyv címe: ccc 2. könyv oldalszáma: 433 2. könyv ára: 2999 2. könyv stílusa: scifi Konzol A legolcsóbb: Konyv [iro=bbb, cim=bbb, oldal=372, ar=1700], Stílusa=matek SciFi könyvek: Konyv [iro=aaa, cim=aaa, oldal=297, ar=1899], Stílusa=scifi Konyv [iro=ccc, cim=ccc, oldal=433, ar=2999], Stílusa=scifi 30/29 B IT MAN
VÉGE VÉGE 30/30 B IT MAN