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

Dziedziczenie a delegacja

Object Storage Arubacloud
+1 głos
2,720 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,635 wizyt
pytanie zadane 10 maja 2015 w Java przez rubesom Obywatel (1,690 p.)
0 głosów
1 odpowiedź 947 wizyt
0 głosów
6 odpowiedzi 628 wizyt
pytanie zadane 26 kwietnia 2015 w Java przez rubesom Obywatel (1,690 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...