Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2015, 20:55   #1
Joose
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 67
По умолчанию Касаемо наследования и полиморфизма

Всем привет, есть следующая иерархия классов:

Код:
class X
    {
        public virtual void fnct()
        {
            Console.WriteLine("Fnct из класса X");
        }
    }

    class Y : X
    {
        public virtual void fnct()
        {
            Console.WriteLine("Fnct из класса Y");
        }
    }

    class Z : Y
    {
        public override void fnct()
        {
            Console.WriteLine("Fnct из класса Z");
        }    
    }
Как можно заметить, в классе Y метод fnct не перегружается. Тогда почему при вызове в main

Код:
X x = new Z();
x.fnct();
на экран выводится строка "Fnct из класса X"? Не могу понять почему так, ведь в классе Z переопределяется метод из класса Y
Joose вне форума Ответить с цитированием
Старый 17.02.2015, 22:08   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Потому что метод fnct переопределяет метод из класса Y, а не X. А метод funct из Y НЕ переопределяет метод из Х - он лишь носит то же название (и вносит путаницу). И, поскольку тип вашей переменной Х, вызывается ветвь переопределений для Х, в которой есть только базовый метод.
Если сделать в Y override вместо virtual (или поменять тип переменной с Х на Y), то вызовется fnct из класса Z.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 17.02.2015, 22:09   #3
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

warning почему не читаете?
lomastr_ вне форума Ответить с цитированием
Старый 18.02.2015, 05:07   #4
Joose
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 67
По умолчанию

Selestis, спасибо огромное, теперь все понятно. Просто ни в одной книге не нашел разбора подобной ситуации.
P.S. warning читал, но мне нужно было разобраться в сути происходящего
Joose вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Понятие полиморфизма andy301086 Общие вопросы .NET 2 24.04.2012 22:33
Вопросы касаемо Widgets Lindemann66 Qt и кроссплатформенное программирование С/С++ 2 02.09.2011 13:51
Классы с использованием полиморфизма Patrool Помощь студентам 0 09.12.2010 00:35
Принципы реализации полиморфизма Nostalgia Помощь студентам 1 05.01.2010 11:49