Переопределение методов и наследование
Результат получается таким:
---
Класс B 20
10
---
Почему значение переменой x для Console.WriteLine(_A.x) = 10, а _A.Z() = 20?
Код:
using System;
namespace Project1
{
public class A
{
public int x = 10;
public virtual void Z()
{
Console.WriteLine("Класс A " + x);
}
}
public class B:A
{
public new int x = 20;
public override void Z()
{
Console.WriteLine("Класс B " + x);
}
}
public class C
{
static void Main()
{
A obA = new A();
B obB = new B();
A _A = obB;
_A.Z();
Console.WriteLine(_A.x);
Console.ReadKey();
}
}
}
namespace Project1
{
public class A
{
public int x = 10;
public virtual void Z()
{
Console.WriteLine("Класс A " + x);
}
}
public class B:A
{
public new int x = 20;
public override void Z()
{
Console.WriteLine("Класс B " + x);
}
}
public class C
{
static void Main()
{
A obA = new A();
B obB = new B();
A _A = obB;
_A.Z();
Console.WriteLine(_A.x);
Console.ReadKey();
}
}
}
Вы же создали обьект Б. в нем функция переопределена.
присвоили его ссылке типа А.
Но функция то осталась переопределенной.
По существу, это самая нужная часть механизма наследования.
Вы можете наопределять сколько угодно потомков - разных видов солдатиков, например - , и переопределить в них функцию их отображения на экране.
А "экрану"каждого отдать как базового "солдат" ика. А экран будет в нужное время вызывать функцию "нарисуй меня" - без знкомства с конкретной реализацией.