1 Periytyminen (inheritance) Mitä periytyminen on? Yli- ja aliluokka Konstruktorit Get- ja set-metodi Muut metodit tostring Yksinkertainen pääohjelma 1 Mitä periytyminen on? Periytymisen avulla olemassa olevasta luokasta voidaan johtaa uusi luokka tai jos luokkien suunnitteluvaiheessa havaitaan, että usealla luokalla on yhteisiä ominaisuuksia, tehdään yhteisistä ominaisuuksista yliluokka josta muut luokat periytetään Esim. Tili Asiakas asiakasnro etunimi sukunimi osoite Luottotili KantaAsiakas bonuskuukausi bonusvuosi 2
2 Periyttäminen Tili-luokasta (yliluokka) voidaan periyttää Luottotili-luokka (aliluokka), jolla on -attribuutti. Aliluokalla voi olla uusia attribuutteja ja metodeja yliluokan metodeja uusiksi koodattuna 3 public class Tili { private String tili; private double ; Periyttäminen Yliluokka Aliluokka private double ; kertoo, minkä luokan tämä luokka perii Aliluokka perii kaikki yliluokan attribuutit ja metodit. Aliluokkaan voidaan määritellä uusia attribuutteja, metodeja sekä korvata yliluokan metodeja. Jos Yliluokan attribuutit on määritelty protected-määreellä, niihin voidaan viitata suoraan aliluokasta. Tämä ei kuitenkaan ole suositeltavaa. 4
3 Konstruktori private double ; public Luottotili() { super(); = 2000.0; kutsutaan yliluokan (Tili-luokan) parametritonta konstruktoria Tili() public Luottotili(String, double, double ) { super(, ); this. = ; Parametriton konstruktori Luottotili luottotili = new Luottotili(); luottotili kutsutaan yliluokan (Tili-luokan) parametrillista konstruktoria Tili(String, double ) 0.0 2000.0 Parametrillinen konstruktori Luottotili luottotili= new Luottotili("Fi06512", 20.0, 3000.0); luottotili Fi06512 20.0 3000.0 Aliluokan konstruktori alustaa vain aliluokan attribuutit. Yliluokan attribuutit alustetaan yliluokan konstruktorilla. Aliluokan konstruktori kutsuu oletuksena yliluokan parametritonta konstruktoria, jos aliluokkaan ei erikseen ole laitettu yliluokan konstruktorin kutsua Yliluokan konstruktorin kutsu on oltava ensimmäisenä käskynä aliluokan konstruktorissa Jos aliluokassa halutaan kutsua yliluokan parametrillista konstruktoria aliluokan konstruktoriin on laitettava yliluokan parametrillisen konstruktorin kutsu. super() kutsuu aliluokasta yliluokan konstruktoria super.metodi() kutsuu aliluokasta yliluokan metodia 6
4 get- ja set-metodit Aliluokkaan koodataan set- ja get-metodit private double ; public double getluottoraja() { return ; public void setluottoraja(double ) { this. = ; Luottotili luottotili = new Luottotili("Fi06512", 20.0, 0.0); luottotili.setluottoraja(1500.0); System.out.print("Luottoraja on " + luottotili.getluottoraja()); Muut metodit Aliluokassa voidaan korvata yliluokan metodi public boolean otto(double maara) { if ((+) >= maara) { = - maara; return true; else { return false; Luottotili luottotili = new Luottotili("Fi06512", 20.0, 3000.0); if (luottotili.otto(3000.0)) { System.out.println("Otto onnistui"); else { System.out.println("Tilillä ei ole katetta"); Luokkaan on koodattu ottometodi uusiksi, koska luottotilin saa mennä n verran negatiiviselle
5 tostring-metodi tostring-metodilla olion attribuutit muunnetaan merkkijonoksi. Metodia käytetään tietojen näyttämiseen. public String tostring() { kutsutaan yliluokan tostring-metodia return super.tostring() + ", =" + ; Luottotili tili = new Tili("Fi06512", 20.0, 3000.0); System.out.println(tili.toString()); =Fi06512, =20.0, =3000.0 Tiedot voidaan näyttää myös get-metodeilla. System.out.println("Numero: " + luottotili.getnumero() + "\nsaldo: " + luottotili.getsaldo() + "\nluottoraja: " + luottotili.getluottoraja()); Numero: Fi06512 Saldo: 20.0 Luottoraja: 3000.0 9 Yksinkertainen pääohjelma public class TiliOhjelma { esitellään ja luodaan public static void main(string[] args) { Luottotili-luokan olio Luottotili luottotili = new Luottotili(); pääohjelman käyttöön Scanner input = new Scanner(System.in); System.out.print("Anna tilin: "); String = input.nextline(); System.out.print("Anna alku: "); double = input.nextdouble(); System.out.print("Anna : "); double = input.nextdouble(); luottotili.setnumero(); luottotili.pano(); luottotili.setluottoraja(); käytetään Tili-luokan metodeja käytetään Luottotililuokan metodia 10