Java (II) - 3. lekcia
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Java (II) - 3. lekciaJava (II) - 3. lekcia

 

Java (II) - 3. lekcia

Google       Google       19. 6. 2006       34 338×

Obsah tretej lekcie:

  • Definovanie tried
  • Premenné v definícii triedy
  • Metódy v definícii triedy
  • Prístup k členom triedy
  • Úloha č. 3

Reklama
Reklama

Definovanie tried

Triedu definujeme (čiže určíme jej obsah a význam) pred vytváraním objektu. Je to vlastne vzor, podľa ktorého budeme vytvárať objekty. Telo triedy je umiestnené medzi dvomi zloženými zátvorkami:


public class Bicykel {

}

Do definície triedy dávame:

  • Premenné (angl. variables a v Jave sa označujú aj ako fields) – pomenované kúsky pamäte, ktoré slúžia na uloženie nejakej informácie alebo dátovej položky.
  • Metódy (angl. methods) – funkcie definované v triede, ktoré vykonávajú operácie pre triedu. Metódy väčšinou pracujú s premennými.

public class Bicykel {
    // premenna
    private int rychlost;

    // metoda
    public int zistiRychlost() {
        return rychlost;
    }

    // metoda
    public void nastavRychlost(int novaRychlost) {
        rychlost = novaRychlost;
    }
}

Premenné v definícii triedy

Objekt vytvorený z triedy (objekt môžeme nazvať aj ako inštanciu triedy) obsahuje všetky premenné, ktoré sú súčasťou definície danej triedy. Tieto premenné sa rozdeľujú na dva druhy:

  • Inštančné premenné (angl. instance variables) – každý objekt vytvorený z danej triedy bude mať svoju vlastnú kópiu každej inštančnej premennej, ktoré boli uvedené v definícii vzorovej triedy. Objekt je jedným výskytom (inštanciou) triedy a hodnoty premenných, ktoré sú v ňom uložené sa odlišujú od ostatných hodnôt premenných objektov vytvorených z tej istej triedy. Inštančná premenná je v triede deklarovaná normálnym spôsobom:

    
    private int rychlost;
    
  • Statické premenné (angl. static variables) – všetky objekty vytvorené zo vzorovej triedy budú túto premennú a jej hodnotu spoločne zdielať. Na rozdiel od inštančných premenných, kde zmena hodnoty pre jeden objekt nemá vplyv na hodnoty iných objektov, je hodnota statickej premennej dostupná v nezmenenej podobe vo všetkých objektoch vzorovej triedy. Takáto premenná musí byť v triede deklarovaná s kľúčovým slovom static:

    
    private static int maximalnaRychlost;
    

Keď v triede definujeme nejaké premenné, tak im nemusíme priradiť žiadnu hodnotu (viď príklad hore, vtedy sa im priradí implicitná hodnota) alebo ich inicializujeme sami na nejakú hodnotu:


private static int maximalnaRychlost = 130;

Metódy v definícii triedy

Metódy definované v triede predstavujú vlastnosti, správanie alebo akcie, ktoré môžu byť vykonávané s premennými budúceho objektu. Tak isto ako u premenných, aj metódy sú rozdelené na inštančné


public int zistiRychlost() {
    return rychlost;
}

a statické


public static int zistiMaximalnuRychlost() {
    return maximalnaRychlost;
}
s tým istým významom. Každá metóda musí mať určený typ návratovej hodnoty a poprípade zoznam parametrov, ktore prijíma na spracovanie.


Prístup k členom triedy

K členom triedy, čiže k premenným alebo metódam, sa pristupuje po vytvorení objektu pomocou operátoru „.“ (bodka). Po vytvorení objektu napr. z triedy Bicykel


Bicykel mojBicykel = new Bicykel();

môžeme pristúpiť k jeho celočíselnej premennej rýchlosť a zmeniť jej hodnotu.


mojBicykel.rychlost = 5;

V zásade by sa nemalo pristupovať priamo k premenným objektu, tak ako je to vidno na vyššie uvedenom zdrojáku, lebo sa tým narúša integrita zapúzdrenia dát. Preto sa tento problém rieši pomocou geterov (od angl. get – získa hodnotu premennej) a seterov (od angl. set – nastaví hodnotu premennej):


// metoda pre ziskanie hodnoty premennej (geter)
public int zistiRychlost() {
    return rychlost;
}

// metoda pre nastavenie hodnoty premennej (seter)
public void nastavRychlost(int novaRychlost) {
    rychlost = novaRychlost;
}

...

mojBicykel.nastavRychlost(5);

System.out.println(mojBicykel.zistiRychlost());

To, ako sú členy triedy alebo jej objektu prístupné napr. iným triedam, určujú prístupové kľúčové slová.

Kľúčové slovo určujúce prístup Povolený prístup
žiadne z metód hociktorej triedy toho istého balíku*
public z metód v hociktorej triede, hocikde
private iba z metódy vo vnútri danej triedy (zvonku žiadny prístup)
protected z metód v hociktorej triede toho istého balíku* a z hociktorej podtriedy

* – Tomu, čo sú to balíky a načo slúžia, sa budem venovať neskôr.

Príklad

Trieda Zakaznik


// trieda Zakaznik a jej definicia
public class Zakaznik {
	// PREMENNE:
	
	/*
	 * instancna premenna pre ulozenie hodnoty
	 * hotovosti zakaznika (klucove slovo 
	 * pristupu - protected)
	 */
	protected int hotovost;
	
	// METODY:
	
	/*
	 * - zisti hodnotu premennej "hotovost";
	 * - navratova hodnota je typu int, lebo vracia
	 *   celocislenu hodnotu premennej "hotovost"
	 */
	public int zistiHotovost() {
		return hotovost;
	}
	
	/*
	 * - nastavi hodnotu premennej "hotovost";
	 * - navratova hodnota je typu void (prazdna), lebo
	 *   metoda nevracia ziadnu hodnotu;
	 * - tato metoda prijima ako parameter premennu 
	 *   "novaHotovost", ktorou sa nastavi premenna 
	 *   "hotovost" na jej hodnotu 
	 */
	public void nastavHotovost(int novaHotovost) {
		hotovost = novaHotovost;
	}
}

Trieda Banka


// trieda Banka a jej definicia
public class Banka {	
	// PREMENNE:
	
	/*
	 * staticka premenna urcujuca maximalnu
	 * vysku vkladu (klucove slovo pristupu
	 * - public); tato premenna je inicializovana
	 * na urcitu hodnotu (v nasom pripade 70000)
	 */
	public static int maxVyskaVkladu = 70000;
	
	/*
	 * instancna premenna pre ulozenie hodnoty
	 * vysky vkladu zakaznika (klucove slovo 
	 * pristupu - private)
	 */
	private int vkladZakaznika;
	
	// METODY:
	
	/*
	 * - zisti hodnotu premennej "vkladZakaznika";
	 * - navratova hodnota je typu int, lebo vracia
	 *   celocislenu hodnotu premennej "vkladZakaznika"
	 */
	public int zistiVkladZakaznika() {
		return vkladZakaznika;
	}
	
	/*
	 * - nastavi hodnotu premennej "vkladZakaznika";
	 * - navratova hodnota je typu void (prazdna), lebo
	 *   metoda nevracia ziadnu hodnotu;
	 * - tato metoda prijima ako parameter premennu 
	 *   "novyVkladZakaznika", ktorou sa nastavi premenna 
	 *   "vkladZakaznika" na jej hodnotu 
	 */
	public void nastavVkladZakaznika(int novyVkladZakaznika) {
		vkladZakaznika = novyVkladZakaznika;
	}
}

Trieda Test


// trieda Test a jej definicia
public class Test {	
	// PREMENNE:
	
	// METODY:

	/*
	 * hlavna staticka metoda obsahujuca zdrojovy kod, podla 
	 * ktoreho sa bude program vykonavat
	 */
	public static void main(String[] args) {
		/*
		 * novy objekt "mojaBanka" vytvoreny na zaklade
		 * vzoru triedy "Banka"
		 */ 
		Banka mojaBanka = new Banka();
		
		/*
		 * novy objekt "mojZakaznik" vytvoreny na zaklade
		 * vzoru triedy "Zakaznik"
		 */ 
		Zakaznik mojZakaznik = new Zakaznik();
		
		// nastavime vysku hotovosti mojhoZakaznika
		mojZakaznik.nastavHotovost(50000);
		
		/*
		 * novy objekt "mojDruhyZakaznik" vytvoreny na zaklade
		 * vzoru triedy "Zakaznik"
		 */ 
		Zakaznik mojDruhyZakaznik = new Zakaznik();
		
		// nastavime vysku hotovosti druheho zakaznika
		mojDruhyZakaznik.nastavHotovost(20000);
		
		// vypis hodnot hotovosti zakaznikov; vsimnite si, ze hodnoty
		// instantnych premennych su odlisne
		System.out.println("1. Hotovost prveho zakaznika v jeho penazenke: "
                		   + mojZakaznik.zistiHotovost());
		System.out.println("2. Hotovost druheho zakaznika v jeho penazenke: "
                		   + mojDruhyZakaznik.zistiHotovost());
		
		// nastavenie vkladu zakaznika do banky pomocou toho, ze
		// ako parameter metody "nastavVkladZakaznika" (objekt mojaBanka) 
		// sa prijima hodnota cez metodu zistiHotovost (objekt mojZakaznik)
		mojaBanka.nastavVkladZakaznika(mojZakaznik.zistiHotovost());
		
		// vypis vysky vkladu zakaznika v banke
		System.out.println("3. Vklad prveho zakaznika v banke: "
				           + mojaBanka.zistiVkladZakaznika());
		
		// vypis maximalnej moznej vysky vkladu v banke
		System.out.println("4. Maximalna mozna vyska vkladu v prvej banke: "
		                   + mojaBanka.maxVyskaVkladu);
		
		/*
		 * novy objekt "mojaDruhaBanka" vytvoreny na zaklade
		 * vzoru triedy "Banka"
		 */
		Banka mojaDruhaBanka = new Banka();
		
		// vypis maximalnej moznej vysky vkladu v druhej banke
		System.out.println("5. Maximalna mozna vyska vkladu v druhej banke: "
		                   + mojaDruhaBanka.maxVyskaVkladu);
		
		// urcenie novej hodnoty pre staticku premennu a jej vypis; vsimnite si, 
		// ze jej hodnota sa zmeni aj v druhej banke
		mojaBanka.maxVyskaVkladu = 75000;
		System.out.println("6. Maximalna mozna vyska vkladu v prvej banke: "
                		   + mojaBanka.maxVyskaVkladu);
		System.out.println("7. Maximalna mozna vyska vkladu v druhej banke: "
						   + mojaDruhaBanka.maxVyskaVkladu);
    }
}

Úloha č. 3

Spusťte uvedený príklad a zmeňte ho tak, aby testoval, či výška vkladu zákazníka vyhovuje maximálnej možnej výške vkladu do banky, a spravte pre statickú premennú metódy na získanie a nastavenie jej hodnoty.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor je studentom FEI STU v Bratislave, odbor Aplikovana Informatika a vo svojom volnom case sa zaobera hlavne programovanim a rad sportuje.
Web    

Nové články

Obrázek ke článku Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Bezpečnostní tým Cisco Talos odhalil celkem 4 kampaně dosud neobjeveného malwaru, který dostal jméno KONNI. Ten se dokázal úspěšně maskovat od roku 2014. Zpočátku se malware zaměřoval pouze na krádeže citlivých dat. Za 3 roky se ale několikrát vyvinul, přičemž jeho současná verze umožňuje útočníkovi z infikovaného počítače nejenom krást data, ale i mapovat stisky na klávesnici, pořizovat screenshoty obrazovky či v zařízení spustit libovolný kód. Pro odvedení pozornosti oběti zasílali útočníci v příloze také obrázek, zprávu a výhružkách severokorejského režimu či kontakty na členy mezinárodních organizací.

Reklama
Reklama
Obrázek ke článku Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Trend Micro, celosvětový lídr v oblasti bezpečnostních řešení a VMware, přední světový dodavatel cloudové infrastruktury a řešení pro podnikovou mobilitu, oznámily výsledky výzkumu mezi českými a slovenskými manažery zodpovědnými za ochranu osobních údajů, který zjišťoval, jak jsou připraveni na nové nařízení o ochraně osobních údajů (GDPR). Většina firem v České republice a na Slovensku nad 100 zaměstnanců je již s novým nařízením GDPR obeznámena. Výzkum provedený ve spolupráci s agenturou Ipsos ukázal, že téměř 8 firem z 10 o nařízení ví, přičemž jeho znalost je o něco vyšší na Slovensku (89 %) než v České republice (69 %).

Obrázek ke článku Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Jeden z nejznámějších ransomwarů, Locky, se vrací. Po většinu roku 2016 patřil mezi nejrozšířenější vyděračské softwary. Ke svému šíření využíval emailové kampaně s infikovanými přílohami. Ransomware Locky byl rozesílán prostřednictvím botnetu (internetový robot zasílající spamy) Necurs. Jeho aktivita na konci roku 2016 téměř upadla a spolu s ní i šíření ransomwaru Locky. Před několika týdny se Necurs opět probudil a začal posílat spamy nabízející výhodný nákup akcií. Dne 21. dubna zaznamenal bezpečnostní tým Cisco Talos první velkou kampaň ransomwaru Locky prostřednictvím botnetu Necurs za posledních několik měsíců.

Obrázek ke článku Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií do mobilů či notebooků upouštějí od letecké přepravy zboží. V letošním roce plánují dovézt až 80 % produktů lodí. Přitom před 5 lety byla většina baterií do mobilních přístrojů dovezených do České republiky přepravována letadlem. Za proměnou způsobu transportu akumulátorů stojí zpřísnění pravidel pro leteckou přepravu, která přinášejí vyšší náklady i náročnou agendu.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý