Commit f0a0bbc7 by Patryk Czarnik

Pierwsze przykłady klas

parent dc1ca34f
...@@ -6,7 +6,6 @@ public class Funkcje1_Void { ...@@ -6,7 +6,6 @@ public class Funkcje1_Void {
static void poczatek() { static void poczatek() {
// Funkcja typu void nie zwraca żadnego wyniku, tylko "coś robi" // Funkcja typu void nie zwraca żadnego wyniku, tylko "coś robi"
System.out.println("To jest funkcja początek"); System.out.println("To jest funkcja początek");
System.out.println("Funkcja początek kończy się"); System.out.println("Funkcja początek kończy się");
} }
...@@ -24,7 +23,7 @@ public class Funkcje1_Void { ...@@ -24,7 +23,7 @@ public class Funkcje1_Void {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("Początek main"); System.out.println("Początek main");
poczatek(); // wywołanie / invoke poczatek(); // wywołanie / call / invoke
for(int i = 0; i < 10; i++) { for(int i = 0; i < 10; i++) {
ktoraGodzina(); ktoraGodzina();
} }
......
package pcz.p10_klasy_podstawy;
public class Osoba {
// Zmienna definiowana na poziomie klasy (a nie w metodach) jest określana jako:
// pole (field), atrybut (attribute) lub zmienna instancyjna (instance variable).
// Wartości takich zmiennych (nie-statycznych) przechowywane są oddzielnie w każdym obiekcie.
// W tej wersji klas pozostawiamy pola na poziomie widoczności pakietowej. W praktyce Javy najczęściej pola są prywatne.
String imie, nazwisko;
int wiek;
// Zmienne oznaczone static to: zmienne statyczne / pola statyczne / atrybuty statyczne.
// Wartość jest przechowywana w jednym egzemplarzu w klasie (a nie obiekcie).
// Wszystkie obiekty mają dostęp do jednej, wspólnej wartości zmiennej statycznej.
// Dodatkowo oznaczenie final i wpisanie konkretnej wartości powoduje, że jest to stała (i tak jest traktowana przez kompilator).
static final int WIEK_PELNOLETNIOSCI = 18;
// Konstruktor bezargumentowy, nazywany także "konstruktor domyślny" / default constructor.
// Zostałby automatycznie utworzony, gdyby w klasie nie było innych konstruktorów, ale jeśli są, to musi być zdefiniowany jawnie.
Osoba() {
}
// Dosyć często (ale nie zawsze) definiuje się konstruktor, który inicjalizuje wszystkie pola przekazanymi wartościami.
Osoba(String imie, String nazwisko, int wiek) {
this.imie = imie;
this.nazwisko = nazwisko;
this.wiek = wiek;
}
// Metoda ("nie-statyczna", czyli "instancyjna") to czynność, którą "potrafi" wykonać obiekt.
// Inaczej mówiąc, to funkcja, która jest wywoływana i wykonuje się w kontekście określonego obiektu.
void przedstawSie() {
System.out.println("Nazywam się " + imie + " " + nazwisko + " i mam " + wiek + " lat.");
}
// Metoda może zwracać wynik. Bardzo często wynik zależy od aktualnej wartości pól w obiekcie.
boolean pelnoletnia() {
return wiek >= WIEK_PELNOLETNIOSCI;
}
// Metoda może zmieniać stan obiektu.
void postarzejSie() {
wiek += 1;
}
}
package pcz.p10_klasy_podstawy;
// Jeśli klasa zawiera metodę main, to może pełnić rolę programu - można ją uruchamiać (poleceniem java w wierszu poleceń lub z poziomu środowiska deweloperskiego).
public class Program {
public static void main(String[] args) {
// Deklaracja zmiennej typu obiektowego. Uwaga - sam taki zapis nie tworzy obiektu (inaczej niż w C++).
Osoba a;
// System.out.println(a);
// Utworzenie obiektu i wpisanie "referencji do obiektu" do zmiennej:
a = new Osoba();
// W nowoutworzonym obiekcie, o ile konstruktor i inicjalizacje w klasie nie wpiszą czegoś innego,
// pola są inicjowane na wartości 0, false, null w zależności od typu:
System.out.println(a);
System.out.println("Początkowe wartości pól: " + a.imie + " " + a.nazwisko + " " + a.wiek);
// Na polach obiektu (o ile poziom widoczności pozwala) można wykonywać operacje jak na innych zmiennych.
a.imie = "Ala";
a.nazwisko = "Kowalska";
a.wiek = 30;
System.out.println("a wartości pól: " + a.imie + " " + a.nazwisko + " " + a.wiek);
// Najczęściej deklaracja zmiennej i utworenie obiektu są zapisane razem:
Osoba b = new Osoba("Jan", "Kowalski", 30);
System.out.println(b);
System.out.println("b wartości pól: " + b.imie + " " + b.nazwisko + " " + b.wiek);
System.out.println();
// Wywołania metod na obiektach:
a.przedstawSie();
b.przedstawSie();
if(a.pelnoletnia()) {
System.out.println(a.imie + " jest pełnoletnia");
}
System.out.println();
System.out.println("Postarzejemy " + b.imie + "...");
b.postarzejSie();
a.przedstawSie();
b.przedstawSie();
}
}
package pcz.p10_klasy_podstawy;
public class PustaKlasa {
}
package pcz.p10_klasy_podstawy;
public class PustaKlasaProgram {
public static void main(String[] args) {
// Nawet jeśli definicja klasy jest pusta, można utworzyć obiekt i jest na nim dostepnych kilka metod:
PustaKlasa obiekt = new PustaKlasa();
System.out.println(obiekt);
System.out.println(obiekt.getClass());
System.out.println(obiekt instanceof PustaKlasa);
System.out.println(obiekt.toString());
System.out.println(obiekt.hashCode());
System.out.println(obiekt.equals(obiekt));
System.out.println(obiekt.equals(null));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment