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(); //deklaracja metody } class Limuzyna extends Samochod { public void trabi() { } //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