ZPOB_2016SL_LAB_03
Transkrypt
ZPOB_2016SL_LAB_03
III. Dziedziczenie i interfejsy Zadanie 1. Korzystając z dostępnych źródeł (w tym z dokumentacji języka Java) dowiedz się, jaka jest idea mechanizmu dziedziczenia pomiędzy klasami. Zadanie 2. Zapoznaj się w plikami źródłowymi w katalogu documents, a następnie skompiluj i uruchom program (przypomnij sobie, jak skompilować i uruchomić klasę z pakietu). Zastanów się, jak (i dlaczego) działają poszczególne linie w każdym z plików źródłowych, szczególnie w metodzie main klasy Database. Odpowiedz na pytania zawarte w komentarzach. Zadanie 3. Zadeklaruj klasę Document jako abstrakcyjną (użyj słowa kluczowego abstract). Czy program się teraz skompiluje? Dlaczego? Usuń z metody main klasy Database dwie linie odpowiedzialne za obsługę obiektu klasy Document i skompiluj program ponownie. Zadanie 4. Wyposaż klasę Document w abstrakcyjną metodę titlepage bez ciała. abstract public void titlePage(); Co to znaczy, że metoda jest abstrakcyjna? Czy teraz da się skompilować program? Czy nieabstrakcyjna klasa może posiadać abstrakcyjne metody? Zadeklaruj w klasie dziedziczącej Article metodę titlePage w taki sposób, aby jej wywołanie wypisywało na ekranie sformatowany tytuł i nazwę czasopisma, np: *************************** * Lorem ipsum * * * * Journal: Dolor sit amet * *************************** Zadanie 5. Przesłoń metodę abstrakcyjną getSummary w klasie Article tak, aby zwracała ona ciąg znaków postaci <tytuł artykułu> (w ”<tytuł czasopisma>”), np. Artykuł o biedronkach (w ”Artykuły biologiczne”) Zbadaj, jak działa metoda getSummary w poszczególnych kontekstach. Szczególną uwagę zwróć na obiekt article2. Zadanie 6. Spróbuj przesłonić metodę setTitle w klasie Article. Czy jest to możliwe? Dlaczego? 1 Zadanie 7. Utwórz klasę Book dziedziczącą po klasie Document. Wyposaż ją w odpowiednie metody, według własnego uznania, a następnie przetestuj, jak zachowują się obiekty tej klasy. Sprawdź, do których metod klasy Document możesz się odwołać, które możesz przesłonić, a które musisz zadeklarować. Zadanie 8. Zapoznaj się z plikami źródłowymi pakietu figures. Jeśli któryś fragment nie jest dla Ciebie jasny, wróć do poprzednich zadań. Gdy już wszystko będzie jasne, skompiluj program, uruchom klasę Board i sprawdź, jak działa program. Zadanie 9. Zmodyfikuj konstruktor w klasie Rectangle tak, aby korzystał z konstruktora w klasie nadrzednej Figure. Wykorzystaj słowo kluczowe super. Zadanie 10. Utwórz klasę Circle dziedziczącą po klasie Figure. Definiując kontruktor pamiętaj, że okrąg jest zdefiniowany na płaszczyźnie jednoznacznie przez punkt środkowy i promień. Wyposaż klasę Circle w finalny i statyczny atrybut PI o wartości 3.141593. Wykorzystaj go w implementacji metody area. Zadanie 11. Umieść kilka nowych obiektów klas Rectangle i Circle w tablicy figures. Postaraj się, aby elementy się między sobą różniły. Zadanie 12. Wzbogać pakiet o plik Moveable.java zawierający definicję interfejsu Moveable: interface Moveable{ void move(double x, double y); } Dowiedz się, czym jest interfejs i jak można go wykorzystać. Zadanie 13. W klasie Figure zaimplementuj interfejs Moveable. Wykorzystaj słowo kluczowe implements. Gdzie musi zostać zdefiniowana metoda move, aby program się skompilował?1 Zdefiniuj metodę move w klasie Figure.2 Zadanie 14. Utwórz tablicę elementów typu Moveable, np.: Moveable[] moveables = { new Rectangle(10, 20, 10.0, 5.0), new Circle(10, 10, 5.0) } Spróbuj wywołać na elementach tej tablicy metodę move. Czy jest to możliwe? Czy jest możliwe wywołanie na tych obiektach innych metod, np area? 1 Podpowiedź. Jest więcej niż jedno możliwe miejsce. Zadanie dla chętnych. Dowiedz się, jakie znaczenie w kontekście interfejsów ma słowo kluczowe default. 2 2