5. Język C# - Dziedziczenie i Polimorfizm.pdf

(786 KB) Pobierz
JĘZYK C# - DZIEDZICZENIE I
POLIMORFIZM
Dziedziczenie
Jak sama nazwa mówi dziedziczenie pozwala nam dziedziczyć pewne cechy zarówno w
prawdziwym życiu jak i w programowaniu. Dziedziczyć można wielokrotnie, wiele klas może
dziedziczyć tą samą klasę. Dziedziczyć można tylko po jednej klasie zawsze.
Przykład
class
Program
{
static void
Main(string[] args)
{
// Możemy stworzyć kolejną planetę w ten sposób, a nie chcemy.
CialoNiebieskie cialoNiebieskie =
new
CialoNiebieskie();
cialoNiebieskie.Nazwa =
"Mars";
Console.WriteLine(cialoNiebieskie.Nazwa);
}
}
class
CialoNiebieskie
{
public string
Nazwa {
get; set;
}
public void
RuchObrotowy()
{
Console.WriteLine("Każde
ciało niebieskie ma ruch obrotowy.");
}
}
class
Planeta
: CialoNiebieskie
{
void
PoraDniaINocy()
{
Console.WriteLine("Pora
Dnia i Nocy.");
}
}
class
Ziemia
: Planeta
{
void
Atmosfera()
{
Console.WriteLine("Atmosfera
ziemska");
}
}
Język C# - Dziedziczenie i Polimorfizm
1
Nie chcemy utworzyć nowej planety za pomocą obiektu, dlatego tworzymy klasę abstrakcyjną.
Dodając przed słówkiem kluczowym słowo abstract, kompilator nie pozwala nam stworzyć kolejnego
obiektu klasy lub interfejsu abstrakcyjnego. Za to możemy utworzyć nową ziemię
Przykład
namespace
ConsoleApp2
{
class
Program
{
static void
Main(string[] args)
{
// Tworzymy nową ziemię
Ziemia ziemia =
new
Ziemia();
ziemia.Atmosfera();
// Odwołujemy się do metodyz Ziemi
ziemia.PoraDniaINocy();
// Odwołujemy się do metody z Planety
ziemia.RuchObrotowy();
// Odwołujemy się do metody z Ciała
niebieskiego
Console.Read();
}
}
abstract class
CialoNiebieskie
{
public string
Nazwa {
get; set;
}
public void
RuchObrotowy()
{
Console.WriteLine("Każde
ciało niebieskie ma ruch obrotowy.");
}
}
abstract class
Planeta
: CialoNiebieskie
{
public void
PoraDniaINocy()
{
Console.WriteLine("Pora
Dnia i Nocy.");
}
}
class
Ziemia
: Planeta
{
public void
Atmosfera()
{
Console.WriteLine("Atmosfera
ziemska");
}
}
}
Język C# - Dziedziczenie i Polimorfizm
2
Przykład
class
Program
{
static void
Main(string[] args)
{
Postac p1 =
new
Postac("Elf", 200);
Console.WriteLine(p1.imie +
" "
+ p1.punktyHP);
Console.Read();
}
}
class
Postac
{
public
Postac()
{
}
public
Postac(string
imie,
int
punktyHP)
{
this.imie
= imie;
this.punktyHP
= punktyHP;
}
public string
imie;
public int
punktyHP;
}
class
Mag
: Postac
{
public
Mag(string
imie,
int
punktyHP,
int
mana)
{
this.imie
= imie;
this.punktyHP
= punktyHP;
this.mana
= mana;
}
int
mana;
}
Język C# - Dziedziczenie i Polimorfizm
3
Przykład
class
Program
{
static void
Main(string[] args)
{
Mag m1 =
new
Mag("Elf", 200, 50);
Console.WriteLine(m1.imie +
" "
+ m1.punktyHP +
" "
+ m1.mana);
Console.Read();
}
}
class
Postac
{
public
Postac()
{
}
public
Postac(string
imie,
int
punktyHP)
{
this.imie
= imie;
this.punktyHP
= punktyHP;
}
public string
imie;
public int
punktyHP;
}
class
Mag
: Postac
{
public
Mag(string
imie,
int
punktyHP,
int
mana)
{
this.imie
= imie;
this.punktyHP
= punktyHP;
this.mana
= mana;
}
public int
mana;
}
Język C# - Dziedziczenie i Polimorfizm
4
Czy możemy dziedziczyć konstruktor, jasne że tak
Przykład
class
Program
{
static void
Main(string[] args)
{
Mag m1 =
new
Mag("Elf", 200, 50);
Console.WriteLine(m1.imie +
" "
+ m1.punktyHP +
" "
+ m1.mana);
Console.Read();
}
}
class
Postac
{
public
Postac()
{
}
public
Postac(string
imie,
int
punktyHP)
{
this.imie
= imie;
this.punktyHP
= punktyHP;
}
public string
imie;
public int
punktyHP;
}
class
Mag
: Postac
{
// Czy możemy dziedziczyć konstruktor? oczywiście, że tak
// Tak samo jak dziedziczymy z klasy to dziedziczymy z konstruktora
public
Mag(string
imie,
int
punktyHP,
int
mana) :
base(imie,
punktyHP)
{
this.mana
= mana;
}
public int
mana;
}
Język C# - Dziedziczenie i Polimorfizm
5
Zgłoś jeśli naruszono regulamin