hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.27. 22:08



Jelenlévő felhasználók

Jelenleg 531 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 531 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 1 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: [Java] Osztályok
HozzászólásElküldve: 2017.04.10. 17:08 
Offline
Signore Senior
Avatar

Csatlakozott: 2011.09.09. 17:39
Hozzászólások: 4020
Megköszönt másnak: 12 alkalommal
Megköszönték neki: 139 alkalommal
Sziasztok!

9) Java - Object Oriented Programming - Osztályok

Az előző leckében már említésre kerültek az osztályok, talán el is jött az ideje, hogy picit beszélgessünk róluk.

Minden osztály kivétel nélkül az Object osztály subclasse , tőle származik. Az osztályokat nagyon elvonatkoztatva egyfajta "sémaként" képzelhetnénk el, amelyik csak egy váza egy objektumnak. Objektumokkal a való életben is körül vagyunk véve, vegyünk például egy kutyát. Van egy kutya osztályunk, aminek egy "példánya" Zeusz, aki egy kutya. Ő már egy objektum, hiszen saját tulajdonságai (név, méret, szín) vannak, mely tulajdonságok a kutya osztályra vezethetőek vissza.

Ezt az elképzelést teljesen le is modellezhetjük majd később a kódban, előtte azonban fejtsük ezt ki..

Adott egy kutya osztály.. Tudjuk, hogy minden(nyilván vannak kivételek) kutyának van neve, színe, magassága, súlya stb, ezért ezek a tulajdonságok a kutya osztályhoz tartoznak és minden kutya ez alapján fog felépülni. Egy osztálynak (ahogy egy kutyának a való életben) nem csak tulajdonságai lehetnek, hanem viselkedése is. Például a kutya tud inni, enni, szaladni, ugatni, morogni, vicsorítani stb, ezért ez az osztályhoz tartozik, azonban maga az objektumunk, Zeusz is képes lesz ezekre.

Remélem most már mindent megkavartam és abszolút nem érthető semmi, talán egy egyszerű sorral érthetőbb:

Osztály (váz, [kutya]) ---> Objektum (példány, [Zeusz])


Az osztályok, mint a függvények és változók felvehetnek különböző módosító szavakat. Legelőször általában a láthatóságot definiáljuk.

Ezek név szerint a public, protected, private módosító szavak, valamint elhagyása is egy külön láthatósági szint.

A láthatóságot négy szint alapján vizsgáljuk:

Osztályszint: Ez minden módosító szóval be lesz pipálva, hiszen az osztály függvényei elérik a saját osztály tulajdonságait.
Csomagszint: Elérhető-e az osztály és annak metódusai / tulajdonságai, ha ugyanabban a csomagban vannak.
Subclass szint: Elérhető-e az osztály a tőle származtatott osztályok számára.
"Világ" szint: Elérhető-e az osztály mindenhonnan, más csomagokból alkalmazáskomponensekből.

Public

Fájlonként egy publikus osztály megengedett, valamint az osztály nevének meg kell egyeznie a fájl nevével. Pl.:
Kód:
Dog.java  -> public class Dog { }


Láthatósága minden szinten igaz, tehát bárhonnan elérhető, használható.

Protected

Nincs meghatározva, hogy hány protected osztály lehet fájlonként, láthatósági szintje az első három szinten igaz, tehát a származtatott osztályai, a csomag osztályai is elérheti, azonban csomagon kívüli osztályok már nem.


Private

Csak és kizárólag önmagát éri el, még a saját származtatott osztálya SEM éri el. Ezt természetesen csak subclassként használhatjuk, hiszen másképp nem lenne értelme, sőt a fordító is panaszkodna "illegal modofier"-re hivatkozva.

No-modifier

Lehetőségünk van a módosító elhagyására, ilyenkor valahol a Protected és a Private között fog elhelyezkedni az osztályunk. Saját maga számára és csomagon belüli osztályok számára még elérhető, azonban származtatott osztályok és csomagon kívüli osztályok már nem érik el.


Láthatósági módosító szó után megadhatjuk az abstract kulcsszót, mellyel osztályunkat absztrakt osztállyá alakítjuk.
Az absztrakt osztályokat nem példányosíthatjuk, amiről majd később lesz szó. Nyilván ennek elhagyásával osztályunk nem lesz absztrakt.

Ezután jöhet a static kulcsszó, amelyet osztályoknál elég ritkán használunk. Ezzel érhetjük el, hogy osztályunkat lekorlátozzuk egyetlen egy példányra.

Ezt követheti a final kulcsszó, amely egyszerűen megtiltja, hogy osztályunk bővítve legyen.

Miután eldöntöttük a fentiek közül, hogy mire van szükségünk lezárjuk a sorozatot a class kulcsszóval és az osztály nevével.

pl.:

Kód:
public class Pentagon{

}


Az osztályoknak lehetnek változói, metódusai, osztályai.

Valósítsuk meg a fentebb már alaposan kivizsgált kutya osztályunkat.
Kód:

class Dog 
{
    private String name;
    private int age;
    private String color;
    
    public void Bark
() {
        System.out.println("Vau-vau!");
    }
    
    public void Eat
() {
        System.out.println("A kutya eszik!");
    }
    
    public Dog
() {
        System.out.println("Kutya létrehozva!");
    }
    
}


Minden osztálynak van egy konstruktora, amely akkor fut le, amikor az adott osztály példányosítva lett. Ennek deklarálásakor egy egyszerű publikus függvényt hozunk létre az osztály nevével megegyezően.
Feltéve, ha az osztályunk neve Dog, akkor a konstruktorunk
Kód:
public Dog() {  //kód }

A konstruktort nem feltétlen minden esetben írjuk meg saját kézzel, van amikor elhanyagolható, ilyenkor a JVM egy üres konstruktort használ példányosításkor.



Mint azt már fentebb említettem, az osztályokból objektumokat példányosíthatunk (többnyire).
Ennek menete:
  • Megfelelő típussal változó deklarálása,
  • példányosítás a new kulcsszóval,
  • majd végül inicializálás az osztályunk konstruktorával.


Hozzunk létre egy kutya objektumot:

Kód:

package com
.optimaster.silent.dev;

class Dog {
    private String name;
    private int age;
    private String color;
    
    public void Bark
() {
        System.out.println("Vau-vau!");
    }
    
    public void Eat
() {
        System.out.println("A kutya eszik!");
    }
    
    public Dog
() {
        System.out.println("Kutya létrehozva!");
    }
    
}




public class App {
    public static void main(String[] args) {
        
        Dog dog1 
= new Dog();
        
    
}
}
 


Eredményképp ki írja a konzolunkba, hogy a kutya létrehozva. Azonban neve, tulajdonságai még nincsenek, valamint még nem evett és nem is ugatott.

Ezeket majd getterekkel, setterekkel és a konstruktor paraméterezésével fogjuk elérni. Sajnos Javaban nincs property, mint C#-ban, de szerintem meg lehet nélkülük lenni.

Kicsit tömény lehetett ez az anyag és néhol érthetetlen, amennyiben bárkinek kérdése van, szóljon nyugodtan.


A következő leckében szó fog esni a konstruktorról, valamint ha belefér még az időmbe, akkor a getterekről és setterekről is beszélek.
Addig is,
Happy Coding! :)


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 1 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole