Mam pytanie o najbardziej chyba niejasną zasadę SOLID czyli zasadę podstawienia Liskov. Tematów w internecie na temat tej zasady jest multum, mimo wszystko mam jednak pytanie. Często się mówi, że:
jeśli będziemy tworzyć egzemplarz klasy potomnej, to niezależnie od tego, co znajdzie się we wskaźniku na zmienną, wywoływanie metody, którą pierwotnie zdefiniowano w klasie bazowej, powinno dać te same rezultaty.
To tak na prawdę wychodzi na to, że mało kiedy nadpisanie metody klasy bazowej jest możliwe żeby nie złamać tej zasady. Czy już w poniższym przykładzie jest złamana zasada Liskov, bo metoda GetName zwróci inny wynik??
public class Car
{
private string _name;
public Car(string name)
{
_name = name;
}
public virtual string GetName()
{
return _name;
}
}
public class ElectricCar : Car
{
public ElectricCar(string name) : base(name)
{
}
public override string GetName()
{
return base.GetName() + " (Electric)";
}
public void Charge()
{
Console.WriteLine("Charging ...");
}
}
class Program
{
static void Main(string[] args)
{
Car car = new Car("a1");
Console.WriteLine(car.GetName()); // a1
car = new ElectricCar("a1");
Console.WriteLine(car.GetName()); // a1 (Electric)
}
}