Dziedziczen
ie
Przegląd zagadnień
Istota dziedziczenia
Dziedziczenie klas
Przesłanianie
Klasy zamknięte
Zagnieżdżanie klas
Podsumowanie
Pytania sprawdzające
Laboratorium
Istota dziedziczenia
Dziedziczenie umożliwia przejęcie
przez klasę
struktury innej klasy
Klasa bazowa – nadrzędna
Klasa pochodna – dziedziczy i
rozbudowuje strukturę klasy bazowej
Hierarchia klas
Dziedziczenie klas (1)
Kod C#
Osoba
+ Nazwisko : string
+ Pesel : int
+ Przedstaw()
Student
+ NumerIndeksu :
int
class Osoba
{
public string Nazwisko;
public int Pesel;
public void Przedstaw()
{
Console.WriteLine(Nazwisko);
}
}
class Student
: Osoba
{
public int NumerIndeksu;
}
Dziedziczenie klas (2)
Kod C#
Osoba
+ Nazwisko : string
+ Pesel : int
+ Przedstaw()
Student
+ NumerIndeksu :
int
Student Wieczny = new Student();
Wieczny.NumerIndeksu = 1000;
Wieczny.Nazwisko = "Smith";
Wieczny.Pesel = 83133200000;
Wieczny.Przedstaw();
Dziedziczenie klas (3)
Modyfikatory dostępu
class Bilet
{
protected
double CenaNetto = 12.00;
private
double Vat = 0.22;
public void PodajCene()
{
double c = CenaNetto;
c += c * Vat;
Console.WriteLine(c.ToString());
}
}
class BiletUlgowy
: Bilet
{
public BiletUlgowy(double znizka)
{
CenaNetto
*= znizka;
Vat = 0.07;
}
}
Bilet
# CenaNetto :
double
- Vat : double
+ PodajCene()
BiletUlgowy
+ <<constructor>>
BiletUlgowy(dou
ble)
Dziedziczenie klas (4)
Modyfikatory dostępu
Bilet b = new Bilet();
b.PodajCene();
b.CenaNetto = 5.00;
b.Vat = 0.07;
BiletUlgowy u = new BiletUlgowy(0.50);
u.PodajCene();
u.CenaNetto = 2.00;
u.Vat = 0.00;
Bilet
# CenaNetto :
double
- Vat : double
+ PodajCene()
BiletUlgowy
+ <<constructor>>
BiletUlgowy(dou
ble)
Przesłanianie
Przesłanianie metody
Bilet
# CenaNetto :
double
- Vat : double
+ PodajCene()
BiletUlgowy
+ <<constructor>>
BiletUlgowy(dou
ble)
+ PodajCene()
class BiletUlgowy : Bilet
{
public
new
void PodajCene
{
base.
PodajCene();
Console.WriteLine(" - ulgowy");
}
}
Klasy zamknięte
Klasy zamknięte (sealed) nie mogą być
dziedziczone
sealed
class CzarnaSkrzynka
{
public ...
private ...
}
class Skrzynka : CzarnaSkrzynka
{
}
Zagnieżdżanie klas
Klasa może zawierać definicje
wewnętrznych klas
Pojazd
- S : Silnik
Silnik
+ Moc : int
class Pojazd
{
class Silnik
{
public int Moc;
}
private Silnik S;
}
Pojazd
Silnik
+ Moc : int
Podsumowanie
Dziedziczenie pozwala na przejęcie zmiennych
składowych i metod klasy bazowej przez klasę
pochodną
W definicji klasy pochodnej klasę bazową
wskazujemy po dwukropku
Dostęp do składowych klasy bazowej określa
się modyfikatorami dostępu (public,
protected, private)
W klasie pochodnej można przesłonić metodę
klasy bazowej za pomocą słowa new
Aby uniemożliwić dziedziczenie z danej klasy,
przed jej definicją umieszcza się słowo sealed
Klasa może zawierać definicje zagnieżdżonej
klasy
Pytania sprawdzające
Czym jest hierarchia klas?
Jak na dziedziczenie wpływają
modyfikatory dostępu public,
protected i private?
Na czym polega przesłanianie?
Jak zabezpieczyć klasę przed jej
dziedziczeniem?
Porównaj obiekt składowy klasy i
zagnieżdżoną klasę wewnętrzną
Laboratorium