Четверг, 21.11.2024, 22:50

  Сайт проекта StreamLive 18.223.213.76

Вы вошли как Гость | Группа "Гости" | RSS

Меню

Категории
С# [55]
VB.net [0]
VB6 [1]

Реклама

Nothing

 
Главная » Статьи » Программирование » С# [ Добавить статью ]
Наследование
Представьте себе, что у нас есть некоторый класс (быть может весьма большой), который почти подходит для нашей конкретной задачи. Почти, но не совсем. Что-то (некоторые методы) в этом классе надо изменить, что-то - добавить. Наследование как раз и служит для этого. При наследовании мы объявляем наш класс потомком другого класса. И наш класс-потомок (или, как его еще называют, дочерний класс) автоматически приобретает всё, что было в родительском классе. Это мы делаем буквально парой строчек. Затем в дочерний класс мы можем что-нибудь добавить (чего не было в классе родительском). Кроме того, в дочернем классе мы можем что-нибудь из родительского класса переопределить - так что оно уже будет работать по-другому.

Давайте рассмотрим это все на примере. У нас будет класс Worker и производный от него класс Boss. Класс Boss будет отличаться от класса Worker во-первых, наличием переменной numOfWorkers (для количества подчиненных) и, во вторых, метод для задания возраста (setAge) будет работать в Boss не так:
using System;
namespace test
{
//Класс Worker
class Worker
{
protected int age=0;
public void setAge(int age)
{
if(age>0 && age<100)
this.age=age;
else
this.age=0;
}
public int getAge()
{
return age;
}
}
//Класс Boss
class Boss : Worker{
public int numOfWorkers; //Количество подчиненных
public new void setAge(int age)
{
if(age>0 && age<45)
this.age=age;
else
this.age=0;
}
}
class Test
{
static void Main(string[] args)
{
Worker wrk1 = new Worker();
Boss boss = new Boss();
wrk1.setAge(50);
boss.setAge(50);
boss.numOfWorkers=4;
Console.WriteLine("Возраст работника "+wrk1.getAge());
Console.WriteLine("Возраст босса "+boss.getAge()+
".\nКоличество подчиненных "+boss.numOfWorkers);
}
}
}

Обратите внимание, как мы вводим новый класс Boss:
...
class Boss : Worker{
...

Такая запись и означает, что новый класс Boss будет потомком другого класса (Worker в данном случае). Так как наш класс - потомок другого класса, то он автоматически умеет все тоже самое, что и родительский класс. В частности, в нем есть переменная age для хранения возраста. Далее, в класс Boss мы вводим переменную numOfWorkers для хранения количество подчиненных у нашего босса. В родительском классе такой переменной не было. Кроме того, нас не устроила реализация метода setAge из родительского класса Worker (по каким-то там внутренним инструкциям фирмы возраст босса не может превышать 45 лет, тогда как возраст работника не может превышать 100), поэтому мы просто написали в классе Boss метод с таким же именем. Обратите внимание на слово new при объявлении метода:
...
public new void setAge(int age)
...

Таким образом мы в производном классе можем что-нибудь добавлять и что-нибудь изменять по отношению к классу родительскому. Обратите внимание, что убирать что-нибудь, полученное в наследство от родительского класса, мы не можем.

При запуске наша программа даст вполне ожидаемый результат - в возраст работника запишется 50, в возраст босса - 0.


Источник:
Категория: С# | Добавил: Sumrak (14.11.2010) | Автор: E W
Просмотров: 1594 | Комментарии: 0 | Теги: | Рейтинг: 0.0/0
Всего комментариев: 0

Log in

Block title

Copyright sumrak © 2024