9. Kompozycja i dziedziczenie Kompozycja – cd.
Transkrypt
9. Kompozycja i dziedziczenie Kompozycja – cd.
9. Kompozycja i dziedziczenie Kompozycja – cd. // Punkt.java package geometria; public class Punkt { double x, y; public Punkt(double x, double y) { this.x = x; this.y = y; } public void przesuń(double dx, double dy) { x += dx; y += dy; } public String toString() { return "(" + x + ", " + y + ")"; } } // Linia.java package geometria; public class Linia { Punkt p1, p2; public Linia(double x1, double y1, double x2, double y2) { p1 = new Punkt(x1, y1); p2 = new Punkt(x2, y2); } public void przesuń(double dx, double dy) { p1.przesuń(dx, dy); p2.przesuń(dx, dy); } public void przesuń(Point p) { p1.przesuń(p.x, p.y); p2.przesuń(p.x, p.y); } public String toString() { return "(" + p1 + ", " + p2 + ")"; } } // Rysunki import geometria.*; public class Rysunki { public static void main(String args[]) { Punkt p = new Punkt(0,1); System.out.println(p); p.przesuń(1,1); System.out.println(p); Linia L1 = new Linia(0,0,1,1), L2 = new Linia(0,0,1,2); L1.przesuń(1,0); L2.przesuń(new Punkt(0,1)); System.out.println(L1); System.out.println(L2); } } // Figura.java package geometria; public class Figura { Linia[] linie; public Figura(double ... wsp) { linie = new Linia[wsp.length/2]; for(int i = 0; i < linie.length-1; ++i) linie[i] = new Linia(wsp[2*i], wsp[2*i+1], wsp[2*i+2], wsp[2*i+3]); linie[linie.length-1] = new Linia(wsp[wsp.length-2], wsp[wsp.length-1], wsp[0], wsp[1]); } } // Figura2.java package geometria; public class Figura2 { Punkt[] punkty; int ile; public Figura2(int rozmiar) { punkty = new Punkt[rozmiar]; ile = 0; } public void dodaj(double x, double y) { punkty[ile++] = new Punkt(x, y); } public int rozmiar() { return ile; } public Punkt weź(int i) { return punkty[i]; } } // Rysunki import geometria.*; public class Rysunki { public static void main(String args[]) { Figura f1 = new Figura(0,0,1,1,0,1); f2 = new Figura(0,0,1,0,1,1,0,1); } } Figura2 f = new Figura2(10); f.dodaj(0,0); f.dodaj(1,0); f.dodaj(1,1); for(int i = 0; i < f.rozmiar(); ++i) f.weź(i).przesuń(1,0); Dziedziczenie kompozycja to relacja część-całość (nowa klasa zawiera istniejącą klasę) dziedziczenie to relacja generalizacja-specjalizacja (nowa klasa jest szczególnym rodzajem istniejącej klasy) Efekty dziedziczenia: - dodanie metody // TV.java class Telewizor { void wlacz() void wylacz() void glosnosc() void kontrast() void jasnosc() } { { { { { ... ... ... ... ... } } } } } class TelewizorKolorowy extends Telewizor { void nasycenie(){ ... } } public class TV { public static void main(String[] args) { TelewizorKolorowy tv = new TelewizorKolorowy(); tv.wlacz(); tv.glosnosc(); tv.kontrast(); tv.nasycenie(); tv.wylacz(); } } - dodanie pola // Firma.java class Osoba { String imię; String nazwisko; } class Pracownik extends Osoba { double pensja; } public class Firma { public static void main(String[] args) { Pracownik p = new Pracownik(); p.imię = "Jan"; p.nazwisko = "Kowalski"; p.pensja = 600.0; } } - przedefiniowanie metody // TV.java class Telewizor { public String toString() { return "Jestem telewizorem"; } } class TelewizorKolorowy extends Telewizor { public String toString() { return "Jestem telewizorem kolorowym"; } } public class TV { public static void main(String[] args) { Telewizor tv1 = new Telewizor(); TelewizorKolorowy tv2 = new TelewizorKolorowy(); System.out.println(tv1); System.out.println(tv2); } }