15 Dziedziczenie
Wykonaj kolejno poniższe czynności:
- Stwórz klasę bazową
Person
z prywatnym polemfirstName
oraz chronionym polemlastName
. Następnie stwórz klasęEmployee
, która dziedziczy po klasiePerson
. W klasieEmployee
próbuj odnieść się do obu pól i zauważ, które z nich są dostępne. - Na bazie klasy
Person
z poprzedniego podpunktu, stwórz metody dostępowe (gettery) dla obu pól. W klasieEmployee
stwó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ą
Book
z prywatnym polemtitle
oraz chronionym polemauthor
. Stwórz klasę potomnąEbook
, która dziedziczy po klasieBook
. W klasieEbook
spró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ę
Tool
z chronionym konstruktorem, który przyjmuje nazwę narzędzia. Następnie stwórz klasę potomnąHammer
, która dziedziczy po klasieTool
. W klasieHammer
stwórz konstruktor, który korzysta z konstruktora klasy bazowej. Zastanów się, dlaczego używając modyfikatoraprivate
dla konstruktora klasy bazowej, taki scenariusz nie byłby możliwy.Stwórz dwa różne pakiety:
animals
imammals
. W pakiecieanimals
stwórz klasę bazowąAnimal
z chronionym polemspecies
i prywatnym polemage
. W pakieciemammals
stwórz klasęDog
, która dziedziczy po klasieAnimal
. Spróbuj odnieść się w klasieDog
do 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ą
Vehicle
z metodądrive
, która wypisuje “The vehicle is moving.”. Następnie stwórz klasę potomnąCar
, która nadopisuje metodędrive
tak, by wypisywała “The car is moving.”. Utwórz obiekt klasyCar
i wywołaj jego metodędrive
, aby zaobserwować wynik. - Na bazie klasy
Vehicle
z poprzedniego podpunktu, w klasieCar
, nadpisz metodędrive
tak, 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ę
Calculator
z metodąadd
, która przyjmuje dwa argumenty typuint
i zwraca ich sumę. Następnie stwórz klasę potomnąExtendedCalculator
, która nadpisuje metodęadd
w taki sposób, by przyjmowała trzy argumenty typuint
i zwracała ich sumę. Zastanów się, czy to faktycznie nadpisywanie metody, czy może coś innego.Stwórz klasę bazową
Base
z metodą statycznąinfo
, która wypisuje “This is the base class.”. Następnie stwórz klasę potomnąChild
i próbuj przesłonić metodę statycznąinfo
tak, 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ą
Computer
z 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
Vehicle
z polami:brand
imodel
. Klasa ta powinna posiadać konstruktor przyjmujący oba te parametry. Następnie stwórz klasę potomną o nazwieCar
, która dziedziczy po klasieVehicle
. KlasaCar
powinna 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
Animal
z polemname
oraz 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
Building
z polami:height
icolor
. 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ąHouse
z dodatkowym polemnumberOfRooms
. KlasaHouse
powinna posiadać konstruktor, który wykorzystuje przeciążony konstruktor klasy bazowej. Stwórz przypadek testowy.Stwórz trzy klasy:
Entity
,Human
iProgrammer
. KlasaHuman
powinna dziedziczyć po klasieEntity
, a klasaProgrammer
po klasieHuman
. W każdej z klas dodaj konstruktor, który wypisuje informację o tworzeniu instancji danej klasy. Stwórz instancję klasyProgrammer
i zaobserwuj kolejność wywoływania konstruktorów.Utwórz klasę
Vehicle
z polamibrand
,model
iyearOfProduction
. Utwórz klasyCar
iMotorcycle
, które dziedziczą po klasieVehicle
. KlasaCar
powinna mieć dodatkowe polenumberOfDoors
, a klasaMotorcycle
poleengineCapacity
. 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ę
Employee
z polamifirstName
,lastName
isalary
. Utwórz klasyProgrammer
iTester
, które dziedziczą po klasieEmployee
. KlasaProgrammer
powinna mieć dodatkowe poleprogrammingLanguage
, a klasaTester
poletestingType
. 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ę
Property
z polamiaddress
,size
iprice
. Utwórz klasyHouse
iApartment
, które dziedziczą po klasieProperty
. KlasaHouse
powinna mieć dodatkowe polenumberOfFloors
, a klasaApartment
polefloorNumber
. 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ę
BoardGame
z polamigameName
,minPlayers
,maxPlayers
orazrules
(jako ArrayList typuString
). Utwórz klasyEducationalGame
iStrategicGame
, które dziedziczą po klasieBoardGame
. KlasaEducationalGame
powinna mieć dodatkowe polesubject
, a klasaStrategicGame
poleduration
. 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ę
Team
z polaminame
,city
orazpoints
(jako ArrayList typuInteger
). Utwórz klasySoccerTeam
iVolleyballTeam
, które dziedziczą po klasieTeam
. KlasaSoccerTeam
powinna mieć dodatkowe polerankingPosition
, a klasaVolleyballTeam
polenumberOfVictories
. 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ę
Computer
z polamimanufacturer
,model
orazpartsPrices
(jako ArrayList typuDouble
). Utwórz klasyLaptop
iDesktop
, które dziedziczą po klasieComputer
. KlasaLaptop
powinna mieć dodatkowe poleweight
, a klasaDesktop
polecaseType
. 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ę
MusicAlbum
z polamititle
,artist
orazratings
(jako ArrayList typuInteger
). Utwórz klasyRockAlbum
iJazzAlbum
, które dziedziczą po klasieMusicAlbum
. KlasaRockAlbum
powinna mieć dodatkowe polerockGenre
, a klasaJazzAlbum
polejazzGenre
. 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ę
Book
z polamiauthor
,title
iyearOfPublication
. Następnie utwórz dwie klasy pochodne:Ebook
, która dodaje polefileSize
iPaperbackBook
, która dodaje polenumberOfPages
. Każda z klas powinna zawierać konstruktory, metody gettery i settery, metodętoString()
,equals()
orazhashCode()
. W metodzieequals()
klasyBook
porównaj tylkoauthor
, w klasieEbook
poauthor
ifileSize
, a w klasiePaperbackBook
porównajauthor
inumberOfPages
. Napisz program testujący te klasy, demonstrujący działanie polimorfizmu i porównanie obiektów.Zaprojektuj klasę
Employee
z polaminame
,department
isalary
. Utwórz dwie klasy pochodne:Manager
z dodatkowym polembonus
iIntern
z poleminternshipLength
. Każda klasa powinna mieć konstruktory, gettery i settery,toString()
,equals()
orazhashCode()
. W metodzieequals()
klasyEmployee
porównaj tylkoname
, w klasieManager
poname
ibonus
, a w klasieIntern
porównajname
iinternshipLength
. Napisz program testujący te klasy, demonstrujący działanie polimorfizmu i porównanie obiektów.