Definicja klasy, tworzenie obiektów. Porównanie i kopiowanie obiektów.
// Przykład ilustruje różne możliwości występujące przy definiowaniu klasy
public class Czas
{
// definicje pól
private int godz;
private int min;
private int sek;
//konstruktory ; modyfikator dostępu konstruktora powinien być taki sam jak całej klasy
// konstruktor podstawowy
public Czas()
{ godz=min=sek = 0; }
// przeciążenie konstruktora
public Czas(int godz)
{
// przesłanianie pola godz
this.godz=godz;
min=sek = 0;
}
//użycie konstruktora w konstruktorze
public Czas(int godz, int min)
{ this(godz,min,0); }
//wykorzystanie innej metody ( nie konstruktora)
public Czas(int godz, int min, int sek)
{ ustawGodzMinSek(godz,min,sek); }
//konstruktor przydatny do kopiowania
public Czas( Czas czas)
{ godz=czas.godz; min=czas.min; sek=czas.sek;}
//metody odczytujące stan obiektu (getters)
public int dajGodz()
{ return godz;}
public int dajMin()
{ return min; }
public int dajSek()
{ return sek; }
// metody ustawiające pola obiektu (setters)
public void ustawGodz(int godz)
{ this.godz=godz;
min=sek = 0;
}
public void ustawGodzMin(int godz, int min)
{ this.godz=godz;
this.min=min;
sek = 0;
}
public void ustawGodzMinSek(int godz, int min, int sek)
{ this.godz=godz;
this.min=min;
this.sek = sek;
}
// inne metody
//przesunięcie czasu o 1 sekundę
public void plusSek()
{
if(sek<59) sek++;
else {sek=0;
if(min<59) min++;
else { min=0;
if(godz<23) godz++;
else godz=0;
// lub godz=++godz%24;
}
}
}
// jaki będzie czas za 1 sekundę
public Czas zaSek()
{ Czas wynik= new Czas();
if(sek<59) {wynik.sek=sek+1;wynik.min=min;wynik.godz=godz;}
else {wynik.sek=0;
if(min<59) {wynik.min=min+1;wynik.godz=godz;}
else { wynik.min=0;
wynik.godz=(godz+1)%24;
}
}
return wynik;
}
//porównanie wartości dwóch czasów ; niestety zwykły operator == nie działa
public boolean equals(Czas czas)
{ return this.godz==czas.godz && this.min == czas.min && this.sek==czas.sek; }
// do pól prywatnych argumentu mamy dostęp ponieważ jesteśmy wewnątrz klasy Czas
public boolean less(Czas czas)
{ if(godz != czas.dajGodz())
return godz<czas.dajGodz();
else if(min!=czas.min) return min<czas.min;
else return sek<czas.sek;
}
// można prościej
public boolean less1(Czas czas)
{
return (godz<czas.godz)||(godz==czas.godz)&&(min<czas.min) || (godz==czas.godz)&&(min==czas.min)&&(sek<czas.sek);
}
// metoda pozwalająca bezpośrednio drukować obiekt
// np. System.out.println( "Jest "+czas);
public String toString()
{ return godz+" : "+min+" : "+sek; }
// tworzy kopię obiektu; operator = nie działa
public Czas copy()
{ return new Czas(this);}
}