0
ООП – наследяване
1. Наследяване – класът наследник взема всички свойства и методи на класа-родител
Когато ще предефинираме някой метод на класа родител трябва да добавим ключовата дума virtual.
1 2 3 4 5 |
//В класа-родител Vehicle: public virtual void Tuning(int speedAdded, Label lbl) //В класа-наследник Car: public override void Tuning(int speedAdded, Label lbl) |
2. Клас-наследник
А) преизползва конструктора на класа-родител: public Motorbike(): base() {…}
1 2 3 4 5 |
public Motorbike() : base() { wheelsCount = 4; passangersCount = 5; } |
Б) предефиниране методи на класа-родител: public override void Tuning() {…}
Примерна задача: Да се направят класове Car и Motorbike, който наследяват Vehicle (от предишния урок). Car и Motorbike да имат допълнителни свойства: wheelsCount, passangersCount и да предефинират ToString() метода и Tuning(…) метода на класа-родител.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
public class Car: Vehicle { private int wheelsCount; private int passangersCount; public Car() : base() { wheelsCount = 4; passangersCount = 5; } public Car(int w, int p, int s, string m, string c): base(s, m, c) { this.wheelsCount = w; this.passangersCount = p; base.Speed = s; base.Model = m; base.Color = c; } public override string ToString() { string res = ""; res += " car model = " + Model; res += " speed = " + Speed.ToString(); res += " color = " + Color; return res; } public override void Tuning(int speedAdded, Label lbl) { Speed = Speed + speedAdded; Model = Model + " tuninged"; lbl.Text = Model + " car was Tuninged with " + speedAdded + ". New max speed = " + Speed; lbl.Text += "<br/> Passangers now feel better at this car!"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public class Motorbike : Vehicle { private int wheelsCount; private int passangersCount; public Motorbike() : base() { wheelsCount = 4; passangersCount = 5; } public Motorbike(int w, int p, int s, string m, string c) : base(s, m, c) { this.wheelsCount = w; this.passangersCount = p; base.Speed = s; base.Model = m; base.Color = c; } public override string ToString() { string res = ""; res += " motorbike model = " + Model; res += " speed = " + Speed.ToString(); res += " color = " + Color; return res; } public override void Tuning(int speedAdded, Label lbl) { Speed = Speed + speedAdded; Model = Model + " tuninged"; lbl.Text = Model + " motorbike was Tuninged with " + speedAdded + ". New max speed = " + Speed; lbl.Text += "<br/> Passangers are very cool on this motorbike!"; } } |
Обекти на класовете и използване:
1 2 3 4 5 6 7 8 9 10 |
Car ladaBaiGeorgi = new Car(); Motorbike penkoBike = new Motorbike(); ... protected void Button1_Click(object sender, EventArgs e) { ladaBaiGeorgi.Speed += 50; Label2.Text = ladaBaiGeorgi.ToString(); penkoBike.Tuning(25, Label3); Label3.Text = penkoBike.ToString(); } |
Задачи за упражнение:
- Да се създаде клас-родител Artist и класовете Singer и Actor да го наследяват.
- Да се направи конструктор на класа Singer, който да преизползва конструктора на класа-родител.
- Да се предефинира един метод на класа-родител и от двата класа-наследник. Извикайте тези методи.