ВНИМАНИЕ! Конкурс по программированию!

Проект Programmers.kz и школа hotPen3D2D предлагает Вам курсы по веб-дизайну, веб-программированию и компьютерной графике. Подробности здесь.

 
Информация к новости
 (голосов: 1)

Урок 12. Наследование

Категория: Программирование » C# » Уроки C#

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

 

Давайте рассмотрим это все на примере. У нас будет класс 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.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Введите два слова, показанных на изображении: *