Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
kurs_java_alx_20240321
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
kurs_java_alx_20240321
Commits
b742211d
Commit
b742211d
authored
Apr 11, 2024
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
polimorfizm - pozostałe przykłady
parent
fbc746c7
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
156 additions
and
0 deletions
+156
-0
Polimorfizm1.java
src/p11_klasy/podstawy/Polimorfizm1.java
+43
-0
Polimorfizm2.java
src/p11_klasy/podstawy/Polimorfizm2.java
+49
-0
Pracownik.java
src/p11_klasy/podstawy/Pracownik.java
+52
-0
StudentInformatyki.java
src/p11_klasy/podstawy/StudentInformatyki.java
+12
-0
No files found.
src/p11_klasy/podstawy/Polimorfizm1.java
View file @
b742211d
...
@@ -28,6 +28,49 @@ public class Polimorfizm1 {
...
@@ -28,6 +28,49 @@ public class Polimorfizm1 {
Sklep
sklep
=
new
Sklep
(
"Lidl"
,
6
);
Sklep
sklep
=
new
Sklep
(
"Lidl"
,
6
);
sklep
.
sprzedajPiwo
(
osoba
);
sklep
.
sprzedajPiwo
(
osoba
);
sklep
.
sprzedajPiwo
(
student
);
sklep
.
sprzedajPiwo
(
student
);
// Zauważmy, że ze zmiennej ktos nie da się odczytać pól kierunek i rok, czy ocen
// System.out.println(ktos.kierunek);
// Bo "nie każda Osoba ma te dane"
// Ale obiekt można zrzutować do zmiennej typu Student.
// Jeśli wiemy, że w zmiennej ktos na pewno jest Student, to można tak:
Student
s1
=
(
Student
)
ktos
;
System
.
out
.
println
(
s1
.
kierunek
);
System
.
out
.
println
(
((
Student
)
ktos
).
rok
);
// Ale jeśli w zmiennej nie studenta, tylko zwykła osoba, to będzie wyjątek ClassCastException
// Student s2 = (Student)osoba;
// System.out.println(s2.kierunek);
// Metoda getClass zwraca aktualną informację o tym, jakiej kalsy jest obiekt.
System
.
out
.
println
(
ktos
.
getClass
());
// Aby sprawdzić, czy rzutowanie będzie możliwe, używamy instanceof:
if
(
ktos
instanceof
Student
)
{
// rzutowanie jest bezpieczne
System
.
out
.
println
(
((
Student
)
ktos
).
rok
);
}
// Od Javy 17 (?) jest dostępne instanceof, które od razu wpisuje wynik do zmiennej:
if
(
ktos
instanceof
Student
s5
)
{
s5
.
dodajOcene
(
4
);
s5
.
dodajOcene
(
5
);
System
.
out
.
println
(
s5
.
sredniaOcen
());
}
// Przypisanie do zmiennej i rzutowanie nie tworzą nowych obiektów, tylko cały czas odnosimy się do tego samego obiektu.
student
.
kierunek
=
"zoologia"
;
student
.
dodajOcene
(
5
);
System
.
out
.
println
();
ktos
.
przedstawSie
();
System
.
out
.
println
(
student
.
oceny
);
System
.
out
.
println
(
student
.
sredniaOcen
());
System
.
out
.
println
(((
Student
)
ktos
).
sredniaOcen
());
}
}
}
}
src/p11_klasy/podstawy/Polimorfizm2.java
0 → 100644
View file @
b742211d
package
p11_klasy
.
podstawy
;
public
class
Polimorfizm2
{
public
static
void
main
(
String
[]
args
)
{
// Dzięki temu, że "Student jest Osobą" i "Pracownik jest Osobą",
// można obiekty tych klas umieści w tablicy (kolekcji itp.) osób.
Osoba
[]
osoby
=
{
new
Osoba
(
"Ala"
,
"Kowalska"
,
44
),
new
Osoba
(
"Ola"
,
"Malinowska"
,
13
),
new
Student
(
"Adam"
,
"Abacki"
,
20
,
"medycyna"
,
1
),
new
StudentInformatyki
(
"Karol"
,
"Infobacki"
,
23
,
3
),
new
Pracownik
(
"Jan"
,
"Kowalski"
,
40
,
"kierowca"
,
3300
),
};
// Przeglądając elementy tablicy wiemy na pewno, że są to Osoby,
// ale dodatkowo może się okazać, że niektóre osoby są Student albo Pracownik
// Każda osoba posiada imię, nazwisko i wiek - można te dany odczytać.
// Każda osoba potrafi się przedstawić - można wywołać przedstawSie()
// ale w każdej podklasie ta metoda może mieć inną treść ("overriding").
// Wykona się wersja z właściwej klasy.
for
(
Osoba
osoba
:
osoby
)
{
System
.
out
.
println
(
"* kolejna osoba to "
+
osoba
.
imie
+
" "
+
osoba
.
nazwisko
);
System
.
out
.
println
(
" "
+
osoba
);
System
.
out
.
print
(
" "
);
// System.out.println(osoba.kierunek); // nie każda osoba jest studentem
osoba
.
przedstawSie
();
System
.
out
.
println
(
" to jest obiekt klasy: "
+
osoba
.
getClass
().
getSimpleName
());
// Można jawnie sprawdzić czy zmienna wskazuje na obiekt określonej klasy
// (lub dalszej podklasy - np. StudentInformatyki jest w tym sensie Studentem)
if
(
osoba
instanceof
Student
)
{
// Jeśli tak jest, to możemy bezpiecznie zrzutować (cast) zmienną na typ Student
Student
student
=
(
Student
)
osoba
;
System
.
out
.
println
(
" To jest student kierunku "
+
student
.
kierunek
+
", który ma średnią ocen "
+
student
.
sredniaOcen
());
}
// natomiast taki if nie byłby prawdziwy dla obiektu klasy StudentInformatyki
if
(
osoba
.
getClass
()
==
Student
.
class
)
{
System
.
out
.
println
(
" to jest konkretnie klasy Student"
);
}
System
.
out
.
println
();
}
}
}
src/p11_klasy/podstawy/Pracownik.java
0 → 100644
View file @
b742211d
package
p11_klasy
.
podstawy
;
import
java.math.BigDecimal
;
// W Javie nie ma "wielodziedziczenia", klasa ma dokładnie jedną nadklasę.
public
class
Pracownik
extends
Osoba
{
private
final
static
int
PENSJA_MINIMALNA
=
4000
;
String
zawod
;
BigDecimal
pensja
;
Pracownik
()
{
}
Pracownik
(
String
imie
,
String
nazwisko
,
int
wiek
,
String
zawod
,
BigDecimal
pensja
)
{
// wywołanie konstruktora z nadklasy
super
(
imie
,
nazwisko
,
wiek
);
this
.
zawod
=
zawod
;
this
.
pensja
=
pensja
;
}
Pracownik
(
String
imie
,
String
nazwisko
,
int
wiek
,
String
zawod
,
double
pensja
)
{
// wywołanie innego konstruktora z tej samej klasy
this
(
imie
,
nazwisko
,
wiek
,
zawod
,
BigDecimal
.
valueOf
(
pensja
).
setScale
(
2
));
}
Pracownik
(
String
imie
,
String
nazwisko
,
int
wiek
,
String
zawod
,
int
pensja
)
{
this
(
imie
,
nazwisko
,
wiek
,
zawod
,
BigDecimal
.
valueOf
(
pensja
).
setScale
(
2
));
}
Pracownik
(
String
imie
,
String
nazwisko
,
int
wiek
,
String
zawod
,
String
pensja
)
{
this
(
imie
,
nazwisko
,
wiek
,
zawod
,
new
BigDecimal
(
pensja
));
}
Pracownik
(
String
imie
,
String
nazwisko
,
int
wiek
,
String
zawod
)
{
this
(
imie
,
nazwisko
,
wiek
,
zawod
,
PENSJA_MINIMALNA
);
}
// tworzenie wielu konstruktorów w tej samej klasie to jest "przeciążanie konstruktorów" / "overloading"
@Override
public
void
przedstawSie
()
{
System
.
out
.
println
(
"Dzień dobry, tu "
+
imie
+
", pracuję jako "
+
zawod
+
" i zarabiam "
+
pensja
+
" zł."
);
}
@Override
public
String
toString
()
{
return
"Pracownik [zawod="
+
zawod
+
", pensja="
+
pensja
+
", imie="
+
imie
+
", nazwisko="
+
nazwisko
+
", wiek="
+
wiek
+
"]"
;
}
}
src/p11_klasy/podstawy/StudentInformatyki.java
0 → 100644
View file @
b742211d
package
p11_klasy
.
podstawy
;
public
class
StudentInformatyki
extends
Student
{
// Czasami podklasa nie ma nowych pól ani metod,
// a jest wprowadzana po to, aby ustalić pewne szczegóły
// Jest to podklasa / podzbiór w sensie matematycznym (logicznym).
public
StudentInformatyki
(
String
imie
,
String
nazwisko
,
int
wiek
,
int
rok
)
{
// ustalamy, że kierunkiem studiów jest "informatyka" i nie może być inaczej
super
(
imie
,
nazwisko
,
wiek
,
"informatyka"
,
rok
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment