Laboratorium Java – Klasy abstrakcyjne i interfejsy [2h] Klasa abstrakcyjna: – nie można utworzyć obiektu tej klasy – może zawierać niekompletną implementację (deklaracje metod) – nieabstrakcyjna klasa pochodna musi implementować metody abstrakcyjne abstract class Samochod { public void hamuje() { } abstract public void trabi(); } class Limuzyna extends Samochod { public void trabi() { } } //deklaracja metody //implementacja metody Interfejs: – interfejs – klasa całkowicie abstrakcyjna (bez implementacji) • elementy publiczne • pola jako stałe (static final) – konieczna inicjalizacja • deklaracje metod public interface Alfabet { public static final int ALFA = 1; int BETA = 2; //automatycznie public static final //deklaracja metody public void literuj(); } – można implementować wiele interfejsów interface A { } interface B { } interface C extends A { } //rozszezanie interfejsu class X implements B, C { } //implementacja Klasa wewnętrzna: – może być private oraz protected – dostęp do wszystkich elementów klasy zewnętrznej – rozwiązuje problem braku wielodziedziczenia class D { } abstract class E { } class Y extends D { class I extends E { } } – tworzenie obiektu klasy wewnętrznej Y y = new Y(); Y.I i = y.new I(); – wewnętrzna klasa statyczna • nie potrzebuje obiektu zewnętrznego • brak dostępu do niestatycznych elementów klasy zewnętrznej Laboratorium Java 07 (Opracowanie: Konrad Kurczyna) 1/2 ✔ dziedziczenie klas wewnętrznych ✔ przesłanianie klas wewnętrznych Klasa anonimowa: – implementacja interfejsów i klas abstrakcyjnych class Z extends D { E make() { return new E() { }; } } ✔ dostęp do ostatecznych zmiennych lokalnych (final) Zadanie: – zaimplementować aplikację z użyciem: • klas abstrakcyjnych oraz interfejsów • klas wewnętrznych lub anonimowych Laboratorium Java 07 (Opracowanie: Konrad Kurczyna) 2/2