Junior — Middle
Na czym polega różnica między używaniem klasy abstrakcyjnej a interfejsu przy definiowaniu kontraktów dla klas?
sobes.tech AI
Odpowiedź od AI
Klasa abstrakcyjna i interfejs w C# służą do definiowania kontraktów, ale mają kluczowe różnice:
- Klasa abstrakcyjna może zawierać implementacje metod, pola, konstruktory i właściwości. Jest używana, gdy trzeba ustalić podstawową implementację i wspólne funkcje dla dziedziczących.
- Interfejs definiuje tylko sygnatury metod, właściwości i zdarzeń bez implementacji (do C# 8.0; od C# 8.0 interfejsy mogą zawierać domyślne implementacje).
Ponadto, klasa może dziedziczyć tylko po jednej klasie abstrakcyjnej, ale może implementować wiele interfejsów.
Przykład:
abstract class Animal
{
public abstract void MakeSound();
public void Sleep() { Console.WriteLine("Śpi"); }
}
interface IFlyable
{
void Fly();
}
class Bird : Animal, IFlyable
{
public override void MakeSound() { Console.WriteLine("Ćwir ćwir"); }
public void Fly() { Console.WriteLine("Lata"); }
}
W ten sposób, klasa abstrakcyjna nadaje się do ogólnego podstawowego zachowania, a interfejs do określenia zestawu możliwości, które mogą być realizowane przez różne klasy.