• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dziedziczenie a delegacja

VPS Starter Arubacloud
+1 głos
2,712 wizyt
pytanie zadane 12 maja 2015 w Java przez rubesom Obywatel (1,690 p.)

Mam kod:


public class PiesTest extends Pies
{

	public static void main(String[] args) 
	{
		PiesTest p = new PiesTest();
		
		p.szczekaj();
		
		Pies pies = new Pies();
		
	}

}

 


public class Pies 
{
	
	void szczekaj()
	{
	System.out.println("hau");
	}

}

 

W klasie PiesTest za pierwszym razem używam metody szczekaj poprzez dziedziczenie (obiekt "p").

Za drugim razem tworzę obiekt "pies" i też używam metody szczekaj.

W związku z tym, czym się różni dziedziczenie od delegacji? Czego nie zrobię delegacją, co mógłbym zrobić dziedziczeniem?

2 odpowiedzi

0 głosów
odpowiedź 12 maja 2015 przez Kuba Stary wyjadacz (12,460 p.)
wybrane 12 maja 2015 przez rubesom
 
Najlepsza

Dziedziczenie. Nowa klasa dziedzicząc po poprzedniej otrzymuje pełny jej zestaw pól i metod (z wyjątkiem oczywiście prywatnych). Nowa klasa jest niejako rozszerzeniem innej.

Przykład:

Klasa bazowa - UrządzenieElektryczne. Ma metody wlacz(), wylacz(). Stwórzmy teraz klasę pochodną, niech będzie to czajnik elektryczny. Dziedziczy metody wlacz() i wylacz(), a oprócz tego dodajemy mu metodę zagrzejWode().

Zalety/wady:

Unikamy zbędnego programowania w stylu kopiuj/wklej. Przejrzystość kodu. Możemy użyć polimorfizmu. Niestety dziedziczyć można na raz jedynie z jednej klasy. Dlatego lepszym wyborem zazwyczaj są interfejsy.

Delegacja/kolekcja: Tutaj bardzo łatwo opisać to na przykładzie.

Przykład:

Klasą bazową niech będzie ekwipunek postaci w grze RPG. Nie możemy tu przecież dziedziczyć po klasach Zbroja, Miecz, czy Tarcza. Możemy za to stworzyć kolekcję. W klasie Ekwipunek umieszczamy pola klas Miecz, Zbroja, Tarcza. Następnie odwołujemy się (delegujemy) do nich, na przykład nazwaMiecza.atakuj().

Korzyści/wady:

Bardzo wygodne zastosowanie OOP. Łatwość i czytelność kodu. Czasami niestety klasy tworzone są nieprzemyślanie i cały ten mechanizm nie wygląda zbyt przejrzyście.

Podsumowując, jeśli nie wiesz czego w danym przypadku użyć, prawdopodobnie lepiej gdy użyjesz kolekcji. Niektórzy doświadczeni programiści dziedziczenie we współczesnym programowaniu uznają za błąd i opierają całą strukturę programu na interfejsach, jednak nie sugeruj się tym na razie. Wybacz, że nie dawałem przykładów z kodu, tylko opisowo, jednak nie mam tutaj IDE, a forumowy edytor nie supportuje wcięć.

0 głosów
odpowiedź 12 maja 2015 przez Dorion300 Szeryf (90,250 p.)

Podobne pytania

0 głosów
3 odpowiedzi 1,623 wizyt
pytanie zadane 10 maja 2015 w Java przez rubesom Obywatel (1,690 p.)
0 głosów
1 odpowiedź 924 wizyt
0 głosów
6 odpowiedzi 604 wizyt
pytanie zadane 26 kwietnia 2015 w Java przez rubesom Obywatel (1,690 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...