Что это такое? Ошибка или нет?

Есть следующие объявления классов A и B:

class A
{
    virtual void Foo()
    {
        Console.Write("Class A");
    }
}
class B: A
{
    override void Foo()
    {
        Console.Write("Class B");
    }
}

B obj1 = new A();
obj1.Foo();
 
B obj2 = new B();
obj2.Foo();
 
A obj3 = new B();
obj3.Foo();
Что выведут на консоль такие вызовы метода Foo():

Понятно, что virtual неправильно задан, так как виртуальные методы не могут быть приватными. Но, как вообще можно это понимать ? :
B obj1 = new A();
B obj2 = new B();
A obj3 = new B();
  • Вопрос задан
  • 850 просмотров
Решения вопроса 1
B obj1 = new A(); // не скомпилится
obj1.Foo();
 
B obj2 = new B(); // все норм
obj2.Foo();  // Class B
 
A obj3 = new B(); // полиморфизм в действии
obj3.Foo(); // Class B
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы