Klasa bazowa : CPojazd.
Klasy pochodne: CAmfibia, CSamochod.
Klasy posiadają tam swoje jakieś atrybuty, ale to nie jest istotne. Istotne są ich metody, w klasie bazowej:
public virtual void dodaj_pojazd() { }
oraz analogicznie :
public virtual void wyswietl_pojazd() { }
Natomiast w klasach pochodnych :
public override void dodaj_pojazd() { }
oraz analogicznie :
public override void wyswietl_pojazd() { }
Pytam o to jak rozwiązać to zadanie najlepiej pod względem polimorficznym. Potrzebuję dodawać do tablicy obiektów CPojazd, jej obiekty pochodne czyli z klas CAmfibia, CSamochod itd.
Mój pomysł :
CPojazd [] Pojazdy = new CPojazd [5];
CAmfibia Amfibia = new CAmfibia();
Amfibia.dodaj_pojazd();
Pojazdy[0] = Amfibia;
....
I tak dalej działać w ten sposób, że najpierw tworzę obiekt klasy, którą chcę dodać. Wykorzystuję w tym celu metodę wirtualną dodaj_pojazd, która przecież wie Od razu na jakim obiekcie pracuje, na obiekcie pochodnym czyli CAmfibia, także jakim w tym wszystkim jest polimorfizm? Chyba żaden?
Mój pomysł drugi :
CPojazd [] Pojazdy = new CPojazd [5];
Pojazdy[0].dodaj_pojazd();
....
No i tutaj niby pojawia się polimorfizm, tylko w gruncie rzeczy chyba żaden, bo użyta zostanie metoda wirtualna z klasy bazowej i powstanie obiekt bazowy, a ja przecież tego nie chcę?
Mój pomysł trzeci:
List<CPojazd> Pojazdy = new <CPojazd>();
CAmfibia Amfibia = new CAmfibia();
Amfibia.dodaj_pojazd();
Pojazdy.Add(Amfibia);
....
Korzystam tutaj z kolekcji i chciałem tak zrobić od początku, ponieważ podoba mi się uniwersalność. No ale, tutaj sytuacja podobna do tej pierwszej. Znowu metoda wirtualna zostanie użyta domyślnie z obiektu pochodnego Amfibia.
I teraz pojawia się pytanie, czy przy takim dodawaniu obiektów do struktury złożonej jakimi są tablice, listy - w przykładach, które podałem działa tutaj pojęcie polimorfizmu? Czy tylko kiedy będę wyświetlał z pomocą w/w metody : public override void wyswietl_pojazd() { } i zadziałam tak :
foreach (int i in Pojazdy) Pojazdy[i].wyswietl_pojazd();
Proszę o rozwianie moich wątpliwości i uwagi.
Dziękuję.