Java programátor expert
Java developer interview FAQ, 3. diel: Časté otázky na pracovnom pohovore Java programátora juniora
V tomto diele seriálu pokračujeme v často kladených otázkach, ktoré sa môžu vyskytnúť na 1.kole pracovného pohovoru na pozíciu Java programátor junior.
Pozri si aj ďalšie články zo seriálu Java programátor pohovor:
- Java developer junior interview 1.diel
- Java developer junior interview 2.diel
- Java developer junior interview 4.diel
Dedičnosť je dôležitým konceptom v Jave. Vysvetlite princíp dedenia.
Dedičnosť (inheritance) v Jave je koncept, ktorý umožňuje vytváranie nových tried na základe existujúcich tried. Táto vlastnosť umožňuje zdieľať vlastnosti a metódy jednej triedy s ďalšími triedami. Tá, z ktorej sa dedí, sa nazýva nadradená/rodičovská trieda (superclass) a tá, ktorá dedí, sa nazýva podradená trieda (subclass).
Podradená trieda zdedí všetky členské premenné a metódy nadradenej triedy. Týmto spôsobom môžeme kód znovu použiť a vytvoriť hierarchiu tried, kde každá trieda môže mať vlastné metódy a premenné, ale tiež zdedené vlastnosti od nadradenej triedy.
Dedičnosť v Jave aplikujeme pomocou kľúčového slova extends. Pri deklarácii podradenej triedy musíme uviesť nadradenú triedu, od ktorej sa dedí. Napríklad:
public class PodradenaTrieda extends NadradenaTrieda {
// kód podradenej triedy
Dedičnosť umožňuje polymorfizmus, čo znamená, že objekt typu podradenej triedy môže byť použitý ako objekt typu nadradenej triedy. To umožňuje zjednodušiť kód a zlepšiť flexibilitu programu.
Dedičnosť umožňuje vytváranie komplexných hierarchií tried, ktoré sú základom pre vytváranie efektívneho a modulárneho kódu v Jave.
Čo to je polymorfizmus? Uveď obe formy a vysvetli, aký je medzi nimi rozdiel.
Polymorfizmus v Jave je koncept, ktorý umožňuje používanie jedného názvu/mena pre rôzne typy dát alebo tried. Tento koncept nám umožňuje pracovať s rôznymi triedami, ktoré môžu byť navzájom prepojené dedičnosťou.
V Jave môžeme dosiahnuť polymorfizmus dvoma spôsobmi – cez prekrytie (overriding) a cez preťaženie (overloading) metód.
Prekrytie (overriding) metód:
Prekrytie sa týka metód, ktoré majú rovnaký názov, parametre a návratový typ v nadradenej triede a v podradenej triede. Keď je metóda v podradenej triede prekrytá, nahradí sa metóda z nadradenej triedy a bude sa volať táto nová implementácia. Ide o tzv. compile-time (v čase kompilácie) polymorfizmus.
Preťaženie (overloading) metód:
Tento typ polymorfizmu sa dosahuje pomocou dedičnosti a prepisovania metód (method overriding). Keď máme triedu, ktorá dedí od inej triedy, môžeme prepísať metódu nadradenej triedy v podradenej triede. Objekt typu podradenej triedy môže byť použitý ako objekt typu nadradenej triedy. Java vyberie správnu metódu na základe aktuálneho typu objektu, nie na základe typu premennej. Ide o tzv. runtime (v čase behu programu) polymorfizmus.
Polymorfizmus je užitočným konceptom, pretože nám umožňuje písať univerzálny kód, ktorý môže pracovať s rôznymi typmi objektov, čo je dôležité v objektovo orientovanom programovaní v Jave.
Aký zmysel ma zapuzdrenie (encapsulation) tried v Jave?
Zapúzdrenie (encapsulation) v Jave je koncept, ktorý umožňuje skryť vnútornú implementáciu triedy a poskytuje prístup k jej atribútom a metódam len cez definované rozhranie. Týmto spôsobom sa dá dosiahnuť vyššia bezpečnosť a kontrola nad triedami.
Dosahuje sa pomocou modifikátorov prístupu (access modifiers) a get-set metód (getters and setters). Prístupové modifikátory určujú, ktoré časti triedy sú viditeľné z iných častí programu. Typické prístupové modifikátory sú:
public – viditeľné z hociktorého miesta v programe,
private – viditeľné len v rámci danej triedy,
protected – viditeľné v rámci danej triedy a jej podradených tried,
default (bez uvedenia prístupového modifikátora): – viditeľné v rámci balíka (package) triedy.
Pre prístup k atribútom triedy, ktoré sú deklarované ako private, používame get-set metódy. Get-set metódy slúžia na získanie hodnoty atribútu (get) a nastavenie hodnoty atribútu (set). Týmto spôsobom môžeme kontrolovať prístup k atribútom a zabrániť neplatným hodnotám.
Zapúzdrenie je dôležitý koncept v objektovo orientovanom programovaní, pretože umožňuje lepšiu kontrolu, bezpečnosť a flexibilitu pri práci s triedami a ich atribútmi.
Aká je úloha konštruktora v Jave?
Konštruktor (constructor) je v Jave špeciálna metóda v triede, ktorá sa volá pri vytváraní nového objektu z danej triedy. Konštruktor slúži na inicializáciu objektu a priradenie počiatočných hodnôt jeho atribútom.
Hlavnými vlastnosťami konštruktora sú:
- názov konštruktora musí byť rovnaký ako názov triedy, v ktorej sa nachádza,
- konštruktor nemá žiadny návratový typ, ani typ void,
- volá sa automaticky pri vytváraní nového objektu danej triedy pomocou operátora new,
- môžeme definovať viacero konštruktorov s rôznymi parametrami (tzv. preťažovanie konštruktorov).
Používanie konštruktorov je dôležité pri inicializácii objektov a poskytuje spôsob, ako zabezpečiť, že objekt bude mať platné hodnoty svojich atribútov ihneď po vytvorení.
Na čo slúži abstrakcia v Jave?
Abstrakcia (abstraction) v Jave je koncept, ktorý umožňuje skryť detaily implementácie a zameriava sa len na základné vlastnosti a správanie objektu. Týmto spôsobom sa dá zjednodušiť komplexnosť programovania a zlepšiť jeho čitateľnosť.
V Jave môžeme dosiahnuť abstrakciu pomocou abstraktných tried a rozhraní (interfaces).
Abstraktná trieda (abstract class):
Abstraktná trieda je trieda, ktorá nemôže byť priamo vytvorená ako objekt, ale môže obsahovať abstraktné metódy a normálne metódy. Abstraktná metóda je deklarovaná, ale nemá implementáciu, to znamená, že neobsahuje telo metódy. Abstraktné metódy musia byť implementované v podradených triedach.
Rozhranie (interface):
Rozhranie definuje súbor metód, ktoré musia byť implementované triedami, ktoré toto rozhranie implementujú. Rozhranie je v podstate abstraktné a neobsahuje implementáciu žiadnych metód. Triedy môžu implementovať viacero rozhraní naraz.
Abstrakcia nám umožňuje skrývať zložitosť implementácie a sústrediť sa na to, čo objekt robí a aké metódy poskytuje. Týmto spôsobom sa dosahuje lepšia organizácia kódu, znovu použitie a oddelenie zodpovednosti medzi rôznymi časťami programu.
Ak si Java programátor a hľadáš prácu, prečítaj si viac o plate programátora a pozri si naše pracovné ponuky.