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

Podobne dokumenty