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:

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.

O autorovi

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Daj nám o sebe vedieť