“Szorty” to seria wpisów zawierająca krótkie notatki (podstawowe informacje) związane z pytaniami, jakie pojawiają się na rozmowach rekrutacyjnych. Ich poziom trudności będzie różny. Źródłem pytań są zarówno moje doświadczenia jak również informacje od innych deweloperów. Przede wszystkim tą kategorię traktuję jako swój notatnik, lecz mam nadzieję, że każdy znajdzie tu coś dla siebie.


#1. – Czym się różni interfejs od klasy abstrakcyjnej ?

  • Interfejs może zawierać definicje stałych oraz deklaracje metod. Klasa abstrakcyjna może zawierać zarówno definicje stałych i metod jak również implementacje samych metod. Ponadto klasa abstrakcyjna może zawierać atrybuty.
  • Wszystkie metody zawarte w interfejsie są publiczne. W klasie mogą być publiczne lub chronione.
  • Różnica widoczna jest także w możliwości dziedziczenia. Klasy mogą implementować wiele interfejsów, lecz dziedziczyć tylko po jednej klasie nadrzędnej.

Dlaczego dziedziczenie po wielu interfejsach jest możliwe, a po wielu klasach nie?

Gdy klasa rozszerzałaby wiele klas – rodziców, które posiadałyby metodę o tej samej deklaracji programista musiałby określić, którą z tych metod będzie definiował. To mogłoby rodzić problemy z nadpisywaniem już zdefiniowanych metod.

Dlaczego wszystkie deklaracje w interfejsie są publiczne?

Interfejs jest gwarancją wystąpienia danej metody w klasie, która go dziedziczy. Aby zachować wspomnianą gwarancję następuje wymuszenie istnienia zdefiniowanej funkcjonalności.


Wiem, że przedstawione powyżej informacje to dość duże ogólniki, ale taki własnie jest zamysł serii #Szorty. Jeżeli popełniłem jakiś błąd lub o czymś zapomniałem (mam nadzieję, że nie 😉 ) to zapraszam do zgłaszania uwag w komentarzach.

Author:

Programista, przedsiębiorca, tancerz ognia. Staram się ogarniać rzeczywistość wyciągając jak najwięcej wartości z tego co daje nam technologia. Jestem miłośnikiem produktywności i wyznawcą stwierdzenia "Done is better than perfect". Od ponad 5 lat staram rozwijać się oraz zdobywać doświadczenie jako programista. Najbliżej mi do aplikacji webowych i technologii .NET, ale od jakiegoś czasu stałem się entuzjastą rozwiązań JavaScriptowych.