Klasa abstrakcyjna vs interfejs w Javie

Zadano mi pytanie, chciałem przejrzeć tutaj moją odpowiedź.

P: W jakim scenariuszu bardziej odpowiednie jest rozszerzenie klasy abstrakcyjnej niż implementacja interfejsu (interfejsów)?

ZA: Jeśli używamy wzoru wzorcowego metody szablonowej.

Mam rację ?

Przykro mi, jeśli nie byłem w stanie jasno określić tego pytania.
Znam podstawową różnicę między klasą abstrakcyjną a interfejsem.

1) użyj klasy abstrakcyjnej, gdy wymaganie jest takie, że musimy zaimplementować tę samą funkcjonalność w każdej podklasie dla określonej operacji (zaimplementować metodę) i innej funkcjonalności dla niektórych innych operacji (tylko sygnatury metod)

2) użyj interfejsu, jeśli chcesz, aby podpis był taki sam (i wdrożenia inny), abyś mógł dostosować się do implementacji interfejsu

3) możemy rozszerzyć maksymalnie jedną klasę abstrakcyjną, ale możemy zaimplementować więcej niż jeden interfejs

Powtarzając pytanie: Czy są jakieś inne scenariusze, oprócz tych wymienionych powyżej, w których konkretnie potrzebujemy użyć klasy abstrakcyjnej (widać, że wzorzec projektowy metody szablonowej jest oparty tylko na tym koncepcie)?

Interfejs a klasa abstrakcyjna

Wybór między tymi dwoma naprawdę zależy od tego, co chcesz zrobić, ale na szczęście dla nas, Erich Gamma może nam trochę pomóc.

Jak zawsze istnieje kompromis, interfejs daje wolność w odniesieniu do klasy bazowej, klasa abstrakcyjna daje ciswoboda dodawania nowych metod później. - Erich Gamma

tynie mogę przejść i zmienić interfejsu bez konieczności zmiany wielu innych rzeczy w twoim kodzie, więc jedynym sposobem uniknięcia tego byłoby stworzenie zupełnie nowego interfejsu, co nie zawsze byłoby dobre.

Abstract classes powinien być używany przede wszystkim dla obiektów, które są blisko spokrewnione.Interfaces są lepsze w zapewnianiu wspólnej funkcjonalności dla niepowiązanych klas.

questionAnswers(14)

yourAnswerToTheQuestion