Przejdź do treści głównej
INF.04Pytanie #765 z 856jezyk-csharp-i-platforma-dotnet

Jaki tekst zostanie wyświetlony w konsoli po wykonaniu poniższego kodu w języku C#?

Opcje odpowiedzi:
A
Dźwięk zwierzęcia
B
Hau hau!
Prawidłowa
C
Dźwięk zwierzęcia Hau hau!
D
Kod spowoduje błąd kompilacji.
Reklama

Wyjaśnienie i uzasadnienie dydaktyczne

Poprawna odpowiedź: B

Uzasadnienie i szersze wyjaśnienie:

Przedstawiony kod jest klasycznym przykładem polimorfizmu w programowaniu obiektowym. Kluczowe są tu słowa kluczowe virtual i override.

  1. W linii Zwierze mojeZwierze = new Pies(); tworzymy obiekt typu Pies, ale przechowujemy go w zmiennej typu Zwierze. Jest to możliwe, ponieważ Pies dziedziczy po Zwierze.
  2. Metoda DajGlos() w klasie bazowej Zwierze jest oznaczona jako virtual. Oznacza to, że klasy pochodne mogą dostarczyć jej własną implementację.
  3. Klasa Pies przesłania tę metodę za pomocą słowa kluczowego override, implementując ją jako wypisanie tekstu „Hau hau!”.
  4. Kiedy wywołujemy mojeZwierze.DajGlos(), środowisko uruchomieniowe .NET sprawdza rzeczywisty typ obiektu (którym jest Pies), a nie typ zmiennej (Zwierze). Dzięki temu, że metoda jest wirtualna, zostaje wywołana jej przesłonięta wersja z klasy Pies.

Dlaczego pozostałe odpowiedzi są nieprawidłowe?

  • A. Dźwięk zwierzęcia: Ten tekst zostałby wyświetlony, gdyby metoda DajGlos() w klasie Zwierze nie była wirtualna lub gdyby klasa Pies jej nie przesłoniła.
  • C. Dźwięk zwierzęcia\nHau hau!: Taki wynik uzyskalibyśmy, gdyby wewnątrz metody DajGlos() w klasie Pies znajdowało się dodatkowo wywołanie metody z klasy bazowej, np. base.DajGlos();.
  • D. Kod spowoduje błąd kompilacji: Kod jest w pełni poprawny składniowo i logicznie. Wykorzystuje standardowe mechanizmy dziedziczenia i polimorfizmu w języku C#.

Chcesz poćwiczyć całą kwalifikację INF.04?

Egzamin próbny na czas, nauka działami, losowe pytanie albo przegląd całej bazy — wszystko w przeglądarce i bez zakładania konta.

Rozwiąż w Quizie

Pojęcia z tego pytania

Cały słownik INF04
Reklama

Podobne pytania z działu „Jezyk csharp i platforma dotnet”

Ten sam obszar materiału z kwalifikacji INF.04. W całej bazie znajdziesz 13 pytań z tego działu.