15 Dziedziczenie
Wykonaj kolejno poniższe czynności:
- Stwórz klasę bazową
Personz prywatnym polemfirstNameoraz chronionym polemlastName. Następnie stwórz klasęEmployee, która dziedziczy po klasiePerson. W klasieEmployeepróbuj odnieść się do obu pól i zauważ, które z nich są dostępne. - Na bazie klasy
Personz poprzedniego podpunktu, stwórz metody dostępowe (gettery) dla obu pól. W klasieEmployeestwórz metodędisplayData, która korzysta z tych metod dostępowych, aby wypisać informacje o pracowniku. Zastanów się, dlaczego metody dostępowe są używane do dostępu do prywatnych pól.
- Stwórz klasę bazową
Stwórz klasę bazową
Bookz prywatnym polemtitleoraz chronionym polemauthor. Stwórz klasę potomnąEbook, która dziedziczy po klasieBook. W klasieEbookspróbuj zmienić modyfikator dostępu dla obu pól z klasy bazowej. Zastanów się, dlaczego jedno z pól pozwala na to, a drugie nie.Stwórz klasę
Toolz chronionym konstruktorem, który przyjmuje nazwę narzędzia. Następnie stwórz klasę potomnąHammer, która dziedziczy po klasieTool. W klasieHammerstwórz konstruktor, który korzysta z konstruktora klasy bazowej. Zastanów się, dlaczego używając modyfikatoraprivatedla konstruktora klasy bazowej, taki scenariusz nie byłby możliwy.Stwórz dwa różne pakiety:
animalsimammals. W pakiecieanimalsstwórz klasę bazowąAnimalz chronionym polemspeciesi prywatnym polemage. W pakieciemammalsstwórz klasęDog, która dziedziczy po klasieAnimal. Spróbuj odnieść się w klasieDogdo obu pól z klasy bazowej i zauważ, które z nich są dostępne.Wykonaj kolejno poniższe czynności:
- Stwórz klasę bazową
Vehiclez metodądrive, która wypisuje “The vehicle is moving.”. Następnie stwórz klasę potomnąCar, która nadopisuje metodędrivetak, by wypisywała “The car is moving.”. Utwórz obiekt klasyCari wywołaj jego metodędrive, aby zaobserwować wynik. - Na bazie klasy
Vehiclez poprzedniego podpunktu, w klasieCar, nadpisz metodędrivetak, by wywoływała oryginalną metodę z klasy bazowej i dodatkowo wypisywała informacje specyficzne dla klasyCar. Użyj słowa kluczowegosuper, aby wywołać metodę z klasy bazowej.
- Stwórz klasę bazową
Stwórz klasę
Calculatorz metodąadd, która przyjmuje dwa argumenty typuinti zwraca ich sumę. Następnie stwórz klasę potomnąExtendedCalculator, która nadpisuje metodęaddw taki sposób, by przyjmowała trzy argumenty typuinti zwracała ich sumę. Zastanów się, czy to faktycznie nadpisywanie metody, czy może coś innego.Stwórz klasę bazową
Basez metodą statycznąinfo, która wypisuje “This is the base class.”. Następnie stwórz klasę potomnąChildi próbuj przesłonić metodę statycznąinfotak, by wypisywała “This is the child class.”. Zastanów się nad zachowaniem tak przesłoniętych metod i dlaczego takie przesłanianie jest inaczej traktowane.Stwórz klasę bazową
Computerz chronioną metodąstart, która wypisuje “Computer started.”. Stwórz klasę potomnąLaptop, która próbuje nadpisać metodęstart, ale z modyfikatorem dostępupublic. Spróbuj skompilować kod i zastanów się, dlaczego występują pewne ograniczenia w nadpisywaniu metod pod względem modyfikatorów dostępu.Stwórz klasę bazową o nazwie
Vehiclez polami:brandimodel. Klasa ta powinna posiadać konstruktor przyjmujący oba te parametry. Następnie stwórz klasę potomną o nazwieCar, która dziedziczy po klasieVehicle. KlasaCarpowinna posiadać dodatkowe polenumberOfDoors. Stwórz konstruktor dla klasyCar, który przyjmuje wszystkie trzy parametry i korzysta z konstruktora klasy bazowej. Stwórz przypadek testowy.Stwórz klasę bazową o nazwie
Animalz polemnameoraz konstruktor z domyślnym przypisaniem nazwy do “Unknown”. Następnie stwórz klasęDog, która dziedziczy po klasieAnimal. Nie twórz w niej dodatkowego konstruktora. Sprawdź, jakie zwierzę zostanie utworzone, gdy stworzysz nową instancję klasyDog.Stwórz klasę bazową o nazwie
Buildingz polami:heighticolor. Klasa ta powinna posiadać dwa konstruktory: jeden przyjmujący oba parametry i drugi bezparametrowy, który przypisuje domyślne wartości. Stwórz klasę potomnąHousez dodatkowym polemnumberOfRooms. KlasaHousepowinna posiadać konstruktor, który wykorzystuje przeciążony konstruktor klasy bazowej. Stwórz przypadek testowy.Stwórz trzy klasy:
Entity,HumaniProgrammer. KlasaHumanpowinna dziedziczyć po klasieEntity, a klasaProgrammerpo klasieHuman. W każdej z klas dodaj konstruktor, który wypisuje informację o tworzeniu instancji danej klasy. Stwórz instancję klasyProgrammeri zaobserwuj kolejność wywoływania konstruktorów.Utwórz klasę
Vehiclez polamibrand,modeliyearOfProduction. Utwórz klasyCariMotorcycle, które dziedziczą po klasieVehicle. KlasaCarpowinna mieć dodatkowe polenumberOfDoors, a klasaMotorcyclepoleengineCapacity. Dodaj konstruktory, metody gettery i settery, metodętoString(),equals()orazhashCode()dla każdej z klas. Napisz program testujący zdefiniowane klasy i metody.Utwórz klasę
Employeez polamifirstName,lastNameisalary. Utwórz klasyProgrammeriTester, które dziedziczą po klasieEmployee. KlasaProgrammerpowinna mieć dodatkowe poleprogrammingLanguage, a klasaTesterpoletestingType. Dodaj konstruktory, metody gettery i settery, metodętoString(),equals()orazhashCode()dla każdej z klas. Napisz program testujący zdefiniowane klasy i metody.Utwórz klasę
Propertyz polamiaddress,sizeiprice. Utwórz klasyHouseiApartment, które dziedziczą po klasieProperty. KlasaHousepowinna mieć dodatkowe polenumberOfFloors, a klasaApartmentpolefloorNumber. Dodaj konstruktory, metody gettery i settery, metodętoString(),equals()orazhashCode()dla każdej z klas. Napisz program testujący zdefiniowane klasy i metody.Utwórz klasę
BoardGamez polamigameName,minPlayers,maxPlayersorazrules(jako ArrayList typuString). Utwórz klasyEducationalGameiStrategicGame, które dziedziczą po klasieBoardGame. KlasaEducationalGamepowinna mieć dodatkowe polesubject, a klasaStrategicGamepoleduration. Dodaj konstruktory, metody gettery i settery, metodętoString(),equals()orazhashCode()dla każdej z klas. Napisz program testujący zdefiniowane klasy i metody.Utwórz klasę
Teamz polaminame,cityorazpoints(jako ArrayList typuInteger). Utwórz klasySoccerTeamiVolleyballTeam, które dziedziczą po klasieTeam. KlasaSoccerTeampowinna mieć dodatkowe polerankingPosition, a klasaVolleyballTeampolenumberOfVictories. Dodaj konstruktory, metody gettery i settery, metodętoString(),equals()orazhashCode()dla każdej z klas. Napisz program testujący zdefiniowane klasy i metody.Utwórz klasę
Computerz polamimanufacturer,modelorazpartsPrices(jako ArrayList typuDouble). Utwórz klasyLaptopiDesktop, które dziedziczą po klasieComputer. KlasaLaptoppowinna mieć dodatkowe poleweight, a klasaDesktoppolecaseType. Dodaj konstruktory, metody gettery i settery, metodętoString(),equals()orazhashCode()dla każdej z klas. Napisz program testujący zdefiniowane klasy i metody.Utwórz klasę
MusicAlbumz polamititle,artistorazratings(jako ArrayList typuInteger). Utwórz klasyRockAlbumiJazzAlbum, które dziedziczą po klasieMusicAlbum. KlasaRockAlbumpowinna mieć dodatkowe polerockGenre, a klasaJazzAlbumpolejazzGenre. Dodaj konstruktory, metody gettery i settery, metodętoString(),equals()orazhashCode()dla każdej z klas. Napisz program testujący zdefiniowane klasy i metody.Utwórz klasę
Bookz polamiauthor,titleiyearOfPublication. Następnie utwórz dwie klasy pochodne:Ebook, która dodaje polefileSizeiPaperbackBook, która dodaje polenumberOfPages. Każda z klas powinna zawierać konstruktory, metody gettery i settery, metodętoString(),equals()orazhashCode(). W metodzieequals()klasyBookporównaj tylkoauthor, w klasieEbookpoauthorifileSize, a w klasiePaperbackBookporównajauthorinumberOfPages. Napisz program testujący te klasy, demonstrujący działanie polimorfizmu i porównanie obiektów.Zaprojektuj klasę
Employeez polaminame,departmentisalary. Utwórz dwie klasy pochodne:Managerz dodatkowym polembonusiInternz poleminternshipLength. Każda klasa powinna mieć konstruktory, gettery i settery,toString(),equals()orazhashCode(). W metodzieequals()klasyEmployeeporównaj tylkoname, w klasieManagerponameibonus, a w klasieInternporównajnameiinternshipLength. Napisz program testujący te klasy, demonstrujący działanie polimorfizmu i porównanie obiektów.