package p11_klasy.podstawy_v2;

public class Osoba {
	// Zmienna deklarowana na poziomie klasy to jest:
	// pole (field), atrybut (attribute), zmienna instancyjna (instance variable)
	// Każdy obiekt tej klasy zawiera pola (które nie są statyczne).
	String imie, nazwisko;
	int wiek;
	
	// Klasa może posiadać wiele konstruktorów, które różnią się liczbą lub typem parametrów
	Osoba() {
		
	}
	
	Osoba(String imie, String nazwisko, int wiek) {
		this.imie = imie;
		this.nazwisko = nazwisko;
		this.wiek = wiek;
	}
	
	{ // blok inicjalizacyjny - fragment kodu, który wykona się podczas tworzenia każdego obiektu
	  // jeszcze przed konstruktorem
		System.out.println("powstaje obiekt Osoba");
	}
	
	static {
		// blok inicjalizacyjny statyczny - wykonuje się raz, gdy klasa jest ładowana do maszyny wirtualnej
		System.out.println("static Osoba");
	}
	
	// Metoda to czynność, którą "potrafi wykonać obiekt".
	// nie piszemy już "static"
	// Wewnątrz metody można odwoływać się do pól należących do obiektu.
	// Te odwołania można poprzedzać this ("ten obiekt, w którym jesteśmy), ale w Javie nie trzeba tego robić.
	void przedstawSie() {
		System.out.println("Nazywam się " + imie + " " + nazwisko + " i mam " + wiek + " lat.");
	}
	
	boolean pelnoletnia() {
		return wiek >= 18;
	}
	
}
