# Inheritance Mechanizm pozwalający na wpółdzielenie funcjonalności między Klasy bazowe (superclass) oraz klasy pochodne (subclass) Każda klasa może rozszerzać inną klase (w javie 11, w najnowszych wersjach javy dodano sealed classes), ale tylko jedną. // zagadać o to jakie realne przykłady, co kojarzą z poprzednich projektów Przykład z klasą Vehicle i Car ```java= public class Vehicle { private int wheelsNumber; public Vehicle(int wheelsNumber) { this.wheelsNumber = wheelsNumber; } public void goForward() { System.out.println("Going forward"); } } public class Bicycle extends Vehicle { public Bicycle() { super(2); } @Override public void goForward() { System.out.println("Pedal the bicycle"); super.goForward(); } } public class Car extends Vehicle { private int fuelLiters; public Car(int fuelLiters) { super(4); this.fuelLiters = fuelLiters; } public void start() { System.out.println("Turning car ignition"); if (fuelLiters == 0) { throw new IllegalStateException("No fuel to start car"); } System.out.println("Started car"); } @Override public void goForward() { System.out.println("Press gas pedal"); super.goForward(); } } public class Main { public static void main(String[] args) { Vehicle vehicle = new Vehicle(3); vehicle.goForward(); Car car = new Car(2); car.start(); car.goForward(); } } ``` - [ ] konstruktory bezargumentowe i argumentowe - [ ] super - [ ] override metody - [ ] dziedziczenie z object - [ ] `toString` `hashcode` Zadanie kodowania - Geometry Klasa shape, circle, rectangle, square metoda Area Zaprezentować diamond problem czyli czemu można rozszerzać tylko jedną klasę # Polymorphism, encapsulation (polimorfizm i hermetyzacja/enkapsulacja) Polimorfizm jest to zdolność obiektu do przybierania wielu form. Pozwala na wykoanie tych samych akcji na różne sposoby bez wiedzy o ich implementacji - [ ] zaprojektowanie biblioteki Klasa `Library` `Book` -> `HardCoverBook`, `SoftCoverBook` (hardcover ma np Bookmark ze zaznaczoną jakąś stroną) ```java= public class Library { private Book[] shelf; private int index = -1; public Library(int size) { shelf = new Book[size]; } public void addBook(Book book) { index++; shelf[index] = book; } public Book getBook(int index) { if (index >= 0 && index <= this.index) { return shelf[index]; } throw new IllegalArgumentException("There is no book on shelf in position: " + index); } } ``` - [ ] w mainie wywołanie addBook, getBook i castowanie (instanceof) - [ ] task wymyslcie sami jakis przykład ze mamy jakas wpólną funkcje i te klasy nadpisują i jakies wykorzystanie tego typu nadrzednego ## Dodatkowo warto omówić przed uml - [ ] enum - [ ] pakietowanie - idea i jak - [ ] List - ArrayList i LinkedList