1 / 25

OCPJP

OCPJP. Inner classes. Wprowadzone w Java ?.?. i nner classes method-local inner classes a nonymous inner classes s tatic nested classes. Inner classes. class BabaJaga { class WszystkieDzieciZjada { } } javac BabaJaga.java Jakie pliki utworzą się na dysku?. BabaJaga.class

ismet
Download Presentation

OCPJP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OCPJP Innerclasses

  2. Wprowadzone w Java ?.? • innerclasses • method-localinnerclasses • anonymousinnerclasses • staticnestedclasses

  3. Innerclasses classBabaJaga { classWszystkieDzieciZjada { } } javacBabaJaga.java Jakie pliki utworzą się na dysku?

  4. BabaJaga.class BabaJaga$WszystkieDzieciZjada.class

  5. Czy tak skompilowany program można uruchomić poleceniem:javaZlowrogiDelfin$MalyZlowrogiDelfin? classZlowrogiDelfin { classMalyZlowrogiDelfin { staticvoidmain(String[] args) { System.out.println( „NIE dla delfinariów!”); } } }

  6. public classPakero { privateintobwodKabla = 50; public Stringodzywka = „Koks”; classDanePakera { public voidileMaWKablu() { out.println(„Obwod kabla: ” + obwodKabla); } publicvoidjakaMaOdzywke() { out.println(„Odżywka: ” + odzywka); } } publicvoidcalaPrawdaOPakerze() { DanePakeradp = newDanePakera(); dp.ileMaWKablu(); dp.jakaMaOdzywke(); } }

  7. public voidstaticmain(String[] args) { newPakero().newDanePakera().ileMaWKablu(); Pakero.DanePakeradp = newPakero() .newDanePakera() .jakaMaOdzywke(); }

  8. class Smerfetka { classSekretSmerfetki { voidsekretPierwszy { out.println(„Osiłek issoocool..”); } } staticvoidzdradzSekret() { SekretSmerfetkiss = newSekretSmerfetki(); ss.sekretPierwszy(); } } publicvoidmain(String[] args) { Smerfetka.zdradzSekret(); }

  9. classTieto { intzysk = 1_000_000; intkierownicy = 20; intpracownicy = 700; booleankryzys = true; booleanzarzadZadowolonyZZysku = false; booleankierownikZadowolonyZPracownika = false; booleankoniunkcjaMarsJowisz = false; intprocentZysku(int p) { return p * zysk / 100; } classZarzad { int zysk = 950_000; intpensja() { returnprocentZysku(80); } classKierownicy { intpensja() { returnprocentZysku(15); } classPracownicy { intpensja() { returnzysk - Zarzad.this.pensja() - Kierownicy.this.pensja(); } int pensja1() { returnZarzad.Kierownicy.Pracownicy.this.pensja(); } int pensja2() { returnKierownicy.Pracownicy.this.pensja(); } intmojaPensja() { returnpensja() / pracownicy; } intmojaPremia() { if(!kryzys && zarzadZadowolonyZZysku && kierownikZadowolonyZPracownika && koniunkcjaMarsJowisz) return100 / pracownicy; else return 0; } } } } }

  10. class A { privateint m; public void g() { A$Bob = newA$B(); ob.f(); m = ob.access$0() * ob.access$1(); } int access$0 { return m; } } class A { privateint m; privateclass B { privateint x; privateint y; void f() { x = m; } } public void g() { B ob = new B(); ob.f(); m = ob.x * ob.y; } } classA$B { A this$0; privateint x; void f() { x = this$0.access$0(); } int access$0 { return x; } int access$1 { return y; } }

  11. Modyfikatory • final • abstract • public • private • protected • static * • strictfp

  12. Method-LocalInnerClasses classNaszaKlasa { intuzytkownikow; void statystyka { class Statystyka { int kobiet; intmezczyzn; } Statystyka s = new Statystyka(); println(„kobiet: ” + s.kobiet + „/” + uzytkownikow); println(„mezczyzn: ” + s.mezczyzn + „/” + uzytkownikow); } }

  13. class Warzywniak { StringgodzinyOtwarcia() { finalString nazwa = "Warzywko u Stasia"; classGodzinyOtwarcia { StringutworzListe() { class Godzina { Godzina(String d, int go, intgd) { dzien = d; godzOd = go; godzDo = gd; } Stringdzien; intgodzOd; intgodzDo; publicStringtoString() { returndzien + „:” + godzOd + " - " + godzDo + "\n"; } } return "Godziny otwarcia sklepu: " + nazwa + "\n" + new Godzina("Poniedzialek", 10, 18) + new Godzina("Sroda", 9, 17) + new Godzina("Sobota", 10, 15); } } GodzinyOtwarcia godziny = newGodzinyOtwarcia(); returngodziny.utworzListe(); } } System.out.println(new Warzywniak().godzinyOtwarcia());

  14. class Warzywniak { StringgodzinyOtwarcia() { finalString nazwa = "Warzywko u Stasia"; classGodzinyOtwarcia { +privateString nazwa; +GodzinyOtwarcia(String nazwa) { this.nazwa = nazwa; } StringutworzListe() { class Godzina { Godzina(String d, int go, intgd) { dzien = d; godzOd = go; godzDo = gd; } Stringdzien; intgodzOd; intgodzDo; publicStringtoString() { returndzien + „:” + godzOd + " - " + godzDo + "\n"; } } return "Godziny otwarcia sklepu: " + nazwa + "\n" + new Godzina("Poniedzialek", 10, 18) + new Godzina("Sroda", 9, 17) + new Godzina("Sobota", 10, 15); } } +GodzinyOtwarcia godziny = newGodzinyOtwarcia(nazwa); returngodziny.utworzListe(); } }

  15. Modyfikatory • final • abstract • public • private • protected • static * • strictfp

  16. AnonymousInnerClass classPomidorowa { publicvoidzamieszaj() {} } classOgorkowa { publicvoidzamieszaj() {} } classZupy { privatePomidorowa p = newPomidorowa(); privateOgorkowa o = newOgorkowa() { publicvoidzamieszaj() {} }; }

  17. classOgorkowa { publicvoidzamieszaj() {} } classZupy { privateOgorkowa o = newOgorkowa() { publicvoidzamieszaj() {} publicvoidodcedz() {} }; voidgotuj() { o.zamieszaj(); o.odcedz(); } }

  18. interfaceZupa { voidskladniki(); } abstractclassRosolimplementsZupa { publicabstractvoidzamieszaj(); } classZupy { privateRosolrosol = newRosol() { publicvoidzamieszaj() {} publicvoidskladniki() {} }; privateZupagrzybowa = newZupa() { publicvoidskladniki() {} }; }

  19. interfaceOperacja { intwykonaj(int a, int b);} classDodajimplementsOperacja { publicintwykonaj(int a, int b) { return a + b; } } classOdejmijimplementsOperacja { publicintwykonaj(int a, int b) { return a – b; } } classKalkulator { privateint result = 0; voidoperacja(Operacja op, intliczba) { result = op.wykonaj(result, liczba); System.out.println("Result: " + result); } }

  20. public class Test { static public void main(String[] args) { new Kalkulator() .operacja(newDodaj(), 7) .operacja(newDodaj(), 5) .operacja(newOdejmij(), 1) .operacja(new Operacja() { public intwykonaj(int a, int b) { return a * b; } }, 10); } }

  21. StaticNestedClasses • Klasa statyczna zagnieżdżona nie jest klasą wewnętrzną! Jest statyczną klasą typu top-class. • Ponieważ klasa jest statyczna, nie ma ŻADNYCH powiązań z klasą zewnętrzną. • Tworzenie SNC wymaga użycia nazwy klasy zewnętrznej.

  22. Do czego to się przydaje? • lepsza organizacja kodu / enkapsulacja • tworzenie nowych typów w miejscu ich użycia • szybkie prototypowanie • pozwalają tworzyć zgrabny / elegancki kod

  23. Wady • wzrasta liczba klas, którą musi załadować JVM • duża liczba wewnętrznych klas może zaciemnić kod • nie wszystkie IDE obsługują tak dobrze klasy wewnętrzne jak top klasy (refactoring / podpowiadanie). • raczej tylko dla doświadczonych programistów

  24. Domknięcia (closures)

More Related