Toto je snad nejčastější otázka, kterou v žádné rozhovory týkající se vývoje Softwaru nebo software quality assurance. Z mé zkušenosti jsem viděl, že mnozí z nás jsou často zmateni nebo zapomínají na definici a použití abstraktních tříd a rozhraní. Takže chci, aby to bylo nejjednodušší, aby s tím už nikdo neměl žádné problémy.
abstraktní třída A rozhraní jsou dva velmi důležité Pivoty v objektově orientovaném programovacím konceptu.,
nejprve vysvětlím abstraktní třídu a její použití a později se přesuneme do rozhraní.
abstraktní třída není nic zvláštního, když se chcete odlišit od běžné třídy. Má však některé metody, které nejsou definovány, nebo pouze deklarovány. V takovém případě jsou všechny tyto metody a samotná třída přejmenovány na“ abstraktní “ Klíčové slovo.
abstraktní třída může mít jeden nebo více počet neimplemenovaných metod.,
Jako abstraktní třída, není správné, nebo nemá v ideálním případě definovány metody ve srovnání s běžné třídy, tak abstraktní třídy nelze vytvořit instanci, to znamená, že nemůžeme vytvořit žádné přímé objekty, abstraktní třídy.
třídy, které dědí / rozšiřují tuto abstraktní třídu, musí implementovat / definovat všechny abstraktní metody mateřské abstraktní třídy.
pokud nějaká třída nedokáže definovat některou z abstraktních metod, stává se tato třída také abstraktní třídou.,
Využití (imaginární případová studie):
dejme tomu, v roce 1995, navrhli třídu vozu, který měl další vlastnost-mohli létat. Třídu aut jste navrhli velmi pěkně, všechny vaše metody byly velmi standardní a efektivní, ale tehdy jste věděli, že je zcela nemožné implementovat metodu carFlying (). Takže jste právě nechali metodu carFlying() prázdnou nebo neimplementovanou (nyní víte, že je to abstraktní metoda i třída!).,
dnes chci implementovat to létající auto, které jste již navrhli a technologie již není nemožná. Auto, které budu stavět, má všechny funkce podobné vašemu autu a navíc může létat. Takže, Co mohu udělat, je, že mohu jen zdědit („rozšiřuje“ – pro Javu) svou abstraktní třídu a musí definovat/implementovat tuto carflying () abstraktní metodu. tady máš! naše létající auto je připraveno k převrácení.
takže kdykoli máme některé společné rysy nebo chování mezi různými objekty, můžeme vytvořit obecnou abstraktní třídu s touto funkcí jako implementovanou metodu., Ale tento objekt může mít odlišné chování, v tom případě prohlásíme abstraktní metodu a tyto abstraktní metody implementujeme odlišně podle potřeby objektu.
příklad abstraktní třídy:
podívejme se opět na příklad, parta zápasníků dostane za hraní stejné množství peněz za hodinu. ale mají jinou tématickou hudbu a dokončovací bojovou strategii. Takže můžeme zachovat způsob platby stejný pro všechny a nechat jej implementovat do třídy s názvem Wrestler., umožňuje deklarovat themeMusic() a finišer() metody jako abstraktní, protože tyto dva musí být prováděna rozdílně pro různé předměty, v některých dalších tříd, které dědí náš Zápasník Abstraktní třídy.
a hlavní.java:
Rozhraní:
Pokud jste prošli horní část tohoto tutoriálu správně, porozumění rozhraní bude velmi pro vás jednodušší.
rozhraní není třída, je to jen rozhraní. Má některé metody bez těla uvnitř, jen podpis metody (jsou to v podstatě abstraktní metody!,), a může mít některé konečné a statické proměnné. A typická třída „implementuje“ rozhraní, nikoli „rozšiřuje“.
Více rozhraní lze implementovat (obecně zděděné) najednou.
třídy, které zdědí / implementují rozhraní, musí definovat všechny abstraktní metody rozhraní.
metody uvnitř rozhraní jsou ve výchozím nastavení veřejné, neplatné a abstraktní.
rozhraní je druh vícenásobné dědičnosti v programovacím jazyce Java.
nemůžeme instantiate rozhraní příliš stejně jako abstraktní třídy., Protože jsou neúplné entity a neměly by být povoleny k realizaci. Někdy však může být pro ni pomocí anonymní vnitřní třídy použitelná činnost, jako je instanciating. To dnes není náš program.
použití rozhraní:
rozhraní šetří čas kódování. Může obsahovat některé statické a konečné proměnné, ke kterým lze přistupovat globálně. a některé metody, které jsou abstraktní a snadno dostupné pro další použití kdykoli k tomu, kdo implementuje rozhraní.,
Příklad Rozhraní:
Ve výše uvedeném příkladu Abstraktní třídy, viděli jsme, že jedna metoda byla stejná pro všechny, která měla tělo uvnitř Abstraktní třídy a další metody jsou abstraktní. ale pro rozhraní jsou všechny metody nyní jen podpisem. Třída StoneCold implementuje rozhraní zápasníka a definuje všechny tři abstraktní metody podle jeho potřeby.
tentokrát různí zápasníci získají různé množství peněz za hodinu. Je tedy nejvhodnější dát stejnou metodu jako abstraktní a definovat ji jinde podle potřeby objektu.,
public interface Wrestler {
public abstract void paymentForWork (int hours);
public abstract void themeMusic();
public abstract void finisher();
}
a následující třída implementuje rozhraní zápasníka.
pro hlavní.java:
pro zahájení objektu v případě abstraktní třídy nebo rozhraní můžete mít na paměti následující,
A obj= new B();
//where A is an interface/abstract class. B is the concrete(implements/extends "A”)class which gives it’s memory to A’s obj to have access into B class and utilize its defined methods.