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.

Priprav sa na pracovný pohovor na pozíciu Java developera juniora
Priprav sa na pracovný pohovor na pozíciu Java developera juniora

V článku sa dozvieš:

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ť