20.02. nastavak ( ? proučiti samostalno kod kuće ? ): Statičke klase i statičke metode
1. STATIČKE KLASE
Statička klasa je klasa koja:
- ne može imati objekte
- sadrži samo statičke članove
- koristi se za pomoćne funkcije
Deklariše se:
static class NazivKlase
{
}
Primer:
static class Kalkulator
{
public static int Saberi(int a, int b)
{
return a + b;
}
public static int Oduzmi(int a, int b)
{
return a - b;
}
}
Poziv:
int rezultat = Kalkulator.Saberi(5, 3);
Ne može:
Kalkulator k = new Kalkulator(); // GREŠKA
1.2 Kada koristimo statičku klasu?
- Kada ne postoji potreba za objektom
- Kada pravimo pomoćne metode
- Kada pravimo konvertore, validatore, matematičke operacije
U .NET-u postoji poznata statička klasa:
System.Math
Primer:
double x = Math.Sqrt(16);
2. STATIČKE METODE (i u izvedenim klasama)
Razmotrimo sledeći primer:
class Osoba
{
public static void PrikaziTip()
{
Console.WriteLine("Ovo je osoba.");
}
}
Izvedena klasa:
class Student : Osoba
{
}
Poziv:
Student.PrikaziTip();
Statičke metode se NASLEĐUJU, ali ne učestvuju u polimorfizmu.
3. Sakrivanje(HIDING) statičkih členova
Statički članovi se NE mogu prepisati (override).
Ali mogu se sakriti pomoću ključne reči:
new
Primer:
class Osoba
{
public static void Info()
{
Console.WriteLine("Osoba");
}
}
class Student : Osoba
{
public new static void Info()
{
Console.WriteLine("Student");
}
}
Poziv:
Osoba.Info(); // Osoba
Student.Info(); // Student
VAŽNO:
Ovde nema polimorfizma. Poziv zavisi od tipa klase preko koje se metoda poziva.
Demonstracija razlike
Osoba o = new Student();
o.Info(); // Poziva Osoba.Info()
Zašto?
Zato što static metode:
- pripadaju klasi
- ne objektu
- ne koriste virtual/override
4. static i virtual – u čemu je RAZLIKA?
4.1 Da li static metoda može biti virtual?
NE
Ovo je zabranjeno:
public static virtual void Test() // GREŠKA
Zašto?
Zato što:
- virtual metoda zavisi od objekta
- static metoda ne pripada objektu
Polimorfizam zahteva objekat.
Static članovi postoje i bez objekta.
4.2 Uporedni primer
Virtual metoda:
class Zivotinja
{
public virtual void Glas()
{
Console.WriteLine("Neki zvuk");
}
}
class Pas : Zivotinja
{
public override void Glas()
{
Console.WriteLine("Av av");
}
}
Ovde postoji polimorfizam.
Ali kod static metoda toga nema.
5. Malo složeniji primer – KOMBINACIJA
class Vozilo
{
public static int BrojVozila;
public Vozilo()
{
BrojVozila++;
}
public static void Info()
{
Console.WriteLine("Osnovna klasa Vozilo");
}
}
class Automobil : Vozilo
{
public new static void Info()
{
Console.WriteLine("Izvedena klasa Automobil");
}
}
Test:
Automobil a1 = new Automobil();
Automobil a2 = new Automobil();
Console.WriteLine(Vozilo.BrojVozila); // 2
Vozilo.Info();
Automobil.Info();
6. VEŽBE
Zadatak 1: Napraviti statičku klasu KonvertorValuta sa metodom:
-
EvroUDinare
Rešenje:
static class KonvertorValuta
{
public static double EvroUDinare(double evro)
{
return evro * 117.5;
}
}
Zadatak 2: Napraviti osnovnu klasu Figura sa statičkom metodom Opis(). Nakon toga napraviti izvedenu klasu Krug koja sakriva tu metodu.
Rešenje:
class Figura
{
public static void Opis()
{
Console.WriteLine("Osnovna figura");
}
}
class Krug : Figura
{
public new static void Opis()
{
Console.WriteLine("Krug je figura");
}
}
7. Zadaci za samostalnu vežbu kod kuće
Zadatak 1:
Napraviti statičku klasu Validator koja:
- proverava da li je broj pozitivan
- proverava da li je broj paran
Zadatak 2:
Napraviti osnovnu klasu Uredjaj sa statičkim poljem:
- BrojUredjaja
Izvedenu klasu:
- Racunar
Testirati da li se broj povećava za svaki novi objekat.
Zadatak 3 (napredni)
Napraviti:
- Osnovnu klasu
Clanstvo - Statičku metodu
IspisiPravila()
Izvedenu klasu PremiumClanstvo koja sakriva tu metodu.
Objasniti u komentaru zašto nema polimorfizma.
8. Bitno je da zapamtite KLJUČNE pojmove i zaključke
- Statička klasa ne može imati objekte.
- Statički članovi pripadaju klasi.
- Statičke metode ne učestvuju u polimorfizmu.
- Ne mogu biti virtual niti override.
- Mogu se sakriti pomoću
new. - Poziv zavisi od tipa klase, ne od objekta.
...