Witam, mam banalny przykład, i chciałbym w 100% zrozumieć jak to hula.
public class Zwierze
{
public virtual void Print()
{
Console.WriteLine("Zwierze");
}
}
class Krowa : Zwierze
{
public override void Print()
{
Console.WriteLine("Krowa");
}
}
class Cielak : Krowa
{
public new void Print()
{
Console.WriteLine("Cielak");
}
Zwierze z = new Cielak();
z.Print();
Console.ReadLine();
Jak to jest, że widzę tu krowe?
Może mi ktoś wytłumaczyć, co tak naprawdę jest po lewe stronie ('Zwierze z'), a co po prawej ('new Cielak();')?
Na mój rozum, wydaje mi sie to tak:
Po lewej mamy typ obiektu, po prawej referencję.
Następnie dochodzimy do momentu, kiedy chcemy wywołać metodę Print(), i dochodzi nam do sytuacji, że słówko kluczowe 'new' powoduje, że zamiast wywołać Cielak.print(), leci krowa.print().
Jednak, jak stworzymy sobie Cielak c = new Cielak() to już słówko new nie przeszkadza. Prosił bym o wyjasnienie tej sytuacji :)