Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Mukorka
    addikt

    Hali!

    Köszönöm a válaszokat! Athlon64+, Davs :) :R

    Most jövők elméleti / gyakorlati kérdésekkel, majd. Leporoltam a Java könyveket, és erősen Java hivő lettem ;]

    A beágyazott osztályok, még odébb vannak, de ha ott tartuk, feltétlenül szólok!
    Classloader-t nem ismerem, feliírtam magamnak, az általában melyik nagyobb témakörrel együtt szerepel? Beágyazott osztályoknál? Nekem még ez új volt. :) Mindenképp utánaolvasok majd :)

    Ezt jó volt megjegyezni, hogy a static osztály, csak belső lehet.

    Akkor viszont, jöjjön a kérdés:
    "Mivel azonban a nested classod privát, ezért kívülről egyébként sem férhetsz hozzá az osztályhoz, így az adattagokhoz sem, csak és kizárólag a tartalmazó osztályból."
    1.
    - Miért fér hozzá a tartalmozó osztály? Hiszen ha a belső osztály privát, akkor elméletben nem férek hozzá. De mégis hozzáfér az őt tartalmazó osztály? Miért?
    Például van az A osztáy privát, a B osztály public, akkor az A hozzáfér a B osztály tagfüggvényeihez/adattagjaihoz, de a B nem férhet hozzá az A-hoz.

    2.
    - Milyen gyakorlati haszna van, és mikor érdemes belső static osztályt használni a sima osztály helyet?

    3.
    - Ősosztály példánya hajthat-e végre, az alosztály példányán műveleteket, ha az privát láthatóságú.
    Példa.: Ez így lehet nem állja meg a helyét, meg én Interfésszel valósítanám meg, de elméleti kérdés... Legyen adott egy publikus Állat ősosztály, itt van például az ugat() metódus. És van a publikus Kutya és a privát Farkas alosztály.
    Legyen egy függvény az állatban: hajtóvadászat(Állat állatPéldány) néven, amely meghívja az állat példányhoz tartozó ugat() metódust.
    Ha ezt a hajtóvadászat(Állat állatPéldány) függvényt meghívom úgy, hogy a paraméterben egyszer a Kutya osztály egy példánya van, akkor azon az ugat()-ot végre tudja hajtani, de ha Farkas osztály egy példányánál már nem tudja meghívni az ugat() fv-t igaz? Gondolom ilyenkor a JVM RuntimeException-t kéne dobnia.

    4.a
    Ha egy ősosztály privát (és vele együtt, minden adattag, és tagfv.), és rendelkezik alosztállyal, akkor a fordító automatikusan legenerálja az alosztály számára is a privát adattagokat/tagfv-t?
    4.b
    Vagy az ősosztály protected/privát, és van benne 1 privát adattag. Akkor az alosztály is megkap minden egyes adattagot, még a privát-ot is, csak annyi a különbség, hogy nem fér hozzá az ősosztály ezen privát adattagjához.
    Pl: Állatnak van a privát futás(), és van a publikus Farkas alosztály, akkor a farkas példányának is van futás() nevű fv-e, igaz?
    De akkor megint itt jön a helyetesíthetőség elve, hogy ha Egy Feldolgozó osztályban (Például egy függvényt, amely paraméterben egy állat osztályt vár)meghívom az Állat osztály egy állat nevű példányát, akkor a futás() fv-hez nem férek hozzá. És ha az állat példány helyett egy farkas példányt hívok meg, akkor annak a futás()-a meghívható...
    Nem tudom, hogy mennyire voltam érthető...

    5.
    Akkor ha egy osztály publikus vagy privát, és az adattagjainál nincs külön feltüntetve, hogy milyen láthatóságú, akkor automatikusa az osztály láthatóságát kapják meg, igaz? :)

    arn: http://nagygusztav.hu/java-programozas -ez az előbb említett fórumtárs által javasolt könyv, egy sokkal rövidebb és magyarosított változata.(néha van egy olyan érzésem, hogy csak egy fordító progi lett ráeresztve az eredeti könyvre...) A Thinking in Java könyv, tényleg nem rossz, de én félbe hagytam anno. De nagyon részletes, és még Design Pattern példák is vannak benne!

    a 3. kérdésed fordítási hibát okozna, nem exceptiont. A farkas osztály privát, példányként hogy adnád át?

  • D4nte
    csendes tag

    Hali!

    Köszönöm a válaszokat! Athlon64+, Davs :) :R

    Most jövők elméleti / gyakorlati kérdésekkel, majd. Leporoltam a Java könyveket, és erősen Java hivő lettem ;]

    A beágyazott osztályok, még odébb vannak, de ha ott tartuk, feltétlenül szólok!
    Classloader-t nem ismerem, feliírtam magamnak, az általában melyik nagyobb témakörrel együtt szerepel? Beágyazott osztályoknál? Nekem még ez új volt. :) Mindenképp utánaolvasok majd :)

    Ezt jó volt megjegyezni, hogy a static osztály, csak belső lehet.

    Akkor viszont, jöjjön a kérdés:
    "Mivel azonban a nested classod privát, ezért kívülről egyébként sem férhetsz hozzá az osztályhoz, így az adattagokhoz sem, csak és kizárólag a tartalmazó osztályból."
    1.
    - Miért fér hozzá a tartalmozó osztály? Hiszen ha a belső osztály privát, akkor elméletben nem férek hozzá. De mégis hozzáfér az őt tartalmazó osztály? Miért?
    Például van az A osztáy privát, a B osztály public, akkor az A hozzáfér a B osztály tagfüggvényeihez/adattagjaihoz, de a B nem férhet hozzá az A-hoz.

    2.
    - Milyen gyakorlati haszna van, és mikor érdemes belső static osztályt használni a sima osztály helyet?

    3.
    - Ősosztály példánya hajthat-e végre, az alosztály példányán műveleteket, ha az privát láthatóságú.
    Példa.: Ez így lehet nem állja meg a helyét, meg én Interfésszel valósítanám meg, de elméleti kérdés... Legyen adott egy publikus Állat ősosztály, itt van például az ugat() metódus. És van a publikus Kutya és a privát Farkas alosztály.
    Legyen egy függvény az állatban: hajtóvadászat(Állat állatPéldány) néven, amely meghívja az állat példányhoz tartozó ugat() metódust.
    Ha ezt a hajtóvadászat(Állat állatPéldány) függvényt meghívom úgy, hogy a paraméterben egyszer a Kutya osztály egy példánya van, akkor azon az ugat()-ot végre tudja hajtani, de ha Farkas osztály egy példányánál már nem tudja meghívni az ugat() fv-t igaz? Gondolom ilyenkor a JVM RuntimeException-t kéne dobnia.

    4.a
    Ha egy ősosztály privát (és vele együtt, minden adattag, és tagfv.), és rendelkezik alosztállyal, akkor a fordító automatikusan legenerálja az alosztály számára is a privát adattagokat/tagfv-t?
    4.b
    Vagy az ősosztály protected/privát, és van benne 1 privát adattag. Akkor az alosztály is megkap minden egyes adattagot, még a privát-ot is, csak annyi a különbség, hogy nem fér hozzá az ősosztály ezen privát adattagjához.
    Pl: Állatnak van a privát futás(), és van a publikus Farkas alosztály, akkor a farkas példányának is van futás() nevű fv-e, igaz?
    De akkor megint itt jön a helyetesíthetőség elve, hogy ha Egy Feldolgozó osztályban (Például egy függvényt, amely paraméterben egy állat osztályt vár)meghívom az Állat osztály egy állat nevű példányát, akkor a futás() fv-hez nem férek hozzá. És ha az állat példány helyett egy farkas példányt hívok meg, akkor annak a futás()-a meghívható...
    Nem tudom, hogy mennyire voltam érthető...

    5.
    Akkor ha egy osztály publikus vagy privát, és az adattagjainál nincs külön feltüntetve, hogy milyen láthatóságú, akkor automatikusa az osztály láthatóságát kapják meg, igaz? :)

    arn: http://nagygusztav.hu/java-programozas -ez az előbb említett fórumtárs által javasolt könyv, egy sokkal rövidebb és magyarosított változata.(néha van egy olyan érzésem, hogy csak egy fordító progi lett ráeresztve az eredeti könyvre...) A Thinking in Java könyv, tényleg nem rossz, de én félbe hagytam anno. De nagyon részletes, és még Design Pattern példák is vannak benne!

    5. Annyi azért legyen már tisztázva (csak azért, mert nem értem, miért pont publikus meg privát láthatóságot írtál itt), hogy egy normál osztály (nem belső) csak publikus, vagy ha nem teszel ki láthatósági jelölést, akkor csomagszintű (package) láthatóságú lehet.

    A belső osztály már más kategóriába esik, az lehet public, protected, private, package (nincs kulcsszó írva) szintű is.

    (Még itt érdemes megemlíteni, ha esetleg itt lehetne kavarodás, hogy az Interface egy külön eset, ott minden tag public alapból. (mindegy hogy kiírod, vagy sem))

    Végül pedig az igazi kérdésedre, az előbb leírtak mellett, NEM a válasz, már fentebb is írták. Ha nincs feltüntetve, hogy milyen láthatóságú egy osztály tagja, akkor csomagszintű lesz.

    3. Nem tiszta nekem, hogy most belső osztályokkal (remélem nem), vagy normállal akartad megoldani, de ilyen dolgoknál (meg a legtöbbnél szintén) egyszerűen ki kell próbálni, ha tudod.

    public class Allat {
    void ugat() {
    System.out.println("Állatugatás");
    }

    public static void hajtovadaszat(Allat allatPeldany) {
    allatPeldany.ugat();
    }

    public static void main(String[] args) {
    Allat allat = new Allat();
    Kutya kutya = new Kutya();
    Farkas farkas = new Farkas();

    hajtovadaszat(allat);
    hajtovadaszat(kutya);
    hajtovadaszat(farkas);
    }
    }

    class Kutya extends Allat {
    void ugat() {
    System.out.println("Kutyaugatás");
    }
    }

    class Farkas extends Allat {
    void ugat() {
    System.out.println("Farkasugatás");
    }
    }

    kimenet:
    Állatugatás
    Kutyaugatás
    Farkasugatás

    Ennél a példánál tökéletesen működik a polimorfizmus. Ne zavarjon meg, hogy a leszármazott osztályok csomagszintűek lettek, most azért igazából, mert egy fájlba tettem (de lényegtelen ennél e példánál éppen).
    Próbálgasd módosítani a láthatóságokat, és nézd az eredményt, így kitapasztalhatod a dolgokat.

    (Itt az Allat osztály és az ugat metódusa lehetne inkább abstract, de kérdésedhez nem kapcsolódik igazából)
    Csináltam egy belső osztályos verziót is, talán közelebb van ahhoz amit gondoltál.
    másikverzió

    Java tutorials-t gyors, Thinking in java-t részletes tanuláshoz én is ajánlom, ha jól átveszed benne a dolgokat, a kérdéseid mind megválaszolódnak, plusz, ami nem világos, próbáld is ki!

  • Davs
    tag

    Hali!

    Köszönöm a válaszokat! Athlon64+, Davs :) :R

    Most jövők elméleti / gyakorlati kérdésekkel, majd. Leporoltam a Java könyveket, és erősen Java hivő lettem ;]

    A beágyazott osztályok, még odébb vannak, de ha ott tartuk, feltétlenül szólok!
    Classloader-t nem ismerem, feliírtam magamnak, az általában melyik nagyobb témakörrel együtt szerepel? Beágyazott osztályoknál? Nekem még ez új volt. :) Mindenképp utánaolvasok majd :)

    Ezt jó volt megjegyezni, hogy a static osztály, csak belső lehet.

    Akkor viszont, jöjjön a kérdés:
    "Mivel azonban a nested classod privát, ezért kívülről egyébként sem férhetsz hozzá az osztályhoz, így az adattagokhoz sem, csak és kizárólag a tartalmazó osztályból."
    1.
    - Miért fér hozzá a tartalmozó osztály? Hiszen ha a belső osztály privát, akkor elméletben nem férek hozzá. De mégis hozzáfér az őt tartalmazó osztály? Miért?
    Például van az A osztáy privát, a B osztály public, akkor az A hozzáfér a B osztály tagfüggvényeihez/adattagjaihoz, de a B nem férhet hozzá az A-hoz.

    2.
    - Milyen gyakorlati haszna van, és mikor érdemes belső static osztályt használni a sima osztály helyet?

    3.
    - Ősosztály példánya hajthat-e végre, az alosztály példányán műveleteket, ha az privát láthatóságú.
    Példa.: Ez így lehet nem állja meg a helyét, meg én Interfésszel valósítanám meg, de elméleti kérdés... Legyen adott egy publikus Állat ősosztály, itt van például az ugat() metódus. És van a publikus Kutya és a privát Farkas alosztály.
    Legyen egy függvény az állatban: hajtóvadászat(Állat állatPéldány) néven, amely meghívja az állat példányhoz tartozó ugat() metódust.
    Ha ezt a hajtóvadászat(Állat állatPéldány) függvényt meghívom úgy, hogy a paraméterben egyszer a Kutya osztály egy példánya van, akkor azon az ugat()-ot végre tudja hajtani, de ha Farkas osztály egy példányánál már nem tudja meghívni az ugat() fv-t igaz? Gondolom ilyenkor a JVM RuntimeException-t kéne dobnia.

    4.a
    Ha egy ősosztály privát (és vele együtt, minden adattag, és tagfv.), és rendelkezik alosztállyal, akkor a fordító automatikusan legenerálja az alosztály számára is a privát adattagokat/tagfv-t?
    4.b
    Vagy az ősosztály protected/privát, és van benne 1 privát adattag. Akkor az alosztály is megkap minden egyes adattagot, még a privát-ot is, csak annyi a különbség, hogy nem fér hozzá az ősosztály ezen privát adattagjához.
    Pl: Állatnak van a privát futás(), és van a publikus Farkas alosztály, akkor a farkas példányának is van futás() nevű fv-e, igaz?
    De akkor megint itt jön a helyetesíthetőség elve, hogy ha Egy Feldolgozó osztályban (Például egy függvényt, amely paraméterben egy állat osztályt vár)meghívom az Állat osztály egy állat nevű példányát, akkor a futás() fv-hez nem férek hozzá. És ha az állat példány helyett egy farkas példányt hívok meg, akkor annak a futás()-a meghívható...
    Nem tudom, hogy mennyire voltam érthető...

    5.
    Akkor ha egy osztály publikus vagy privát, és az adattagjainál nincs külön feltüntetve, hogy milyen láthatóságú, akkor automatikusa az osztály láthatóságát kapják meg, igaz? :)

    arn: http://nagygusztav.hu/java-programozas -ez az előbb említett fórumtárs által javasolt könyv, egy sokkal rövidebb és magyarosított változata.(néha van egy olyan érzésem, hogy csak egy fordító progi lett ráeresztve az eredeti könyvre...) A Thinking in Java könyv, tényleg nem rossz, de én félbe hagytam anno. De nagyon részletes, és még Design Pattern példák is vannak benne!

    1.
    - Miért fér hozzá a tartalmozó osztály?
    - Itt most egymasba agyazott Classokrol van szo..Class classon belul (ez nem oroklodes!). Vegyunk pl egy sima public classot. Te a classon kivul tudsz a classbol objectet csinalni, hozzafersz a public valtozoihoz/metodusaihoz, a privathoz viszont nem! A privatot csak a class/object maga tudja hasznalni es ha ugy akarja az isten akkor kozvetlenul te is (egy public metodus a classon belul ami hozzaferest ad a privat valtozohoz). Namost ha egy class tartalmaz egy masik privat classot, akkor ahhoz is csak o fer hozza kozvetlenul.
    public class A{
    private class B{}
    }
    Leegyszerusitve vehetjuk ugy, hogy a B class az Aclass sajatja, tehat hozzaferhet.

    2.
    http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class
    Az elso valaszban van leirva peldaval, hogy hogyan ferhetsz hozza. Ha sima inner class-bol akarsz objektumot csinalni, akkor ha jol tudom eloszor kell egy object-et csinalnod a kulso classbol es csak utana tudsz a belsobol, mert a belso csak a kulson belul "el". Static-ot meg talan tudsz siman Kulso.Belso valtozo = new Kulso.Belso() ;

    3. passz :) Amugy azt polymorfizmusnak hivjak, amikor egy alosztalyt az ososztalyanak tekinted. Viszont igy hirtele fogalmam sincs, mi tortenik, ha privat class orokol az allattol..privat classbol egyaltalan lehet objektumot csinalni? :D

    4. Tudtommal privat dolgokat NEM orokolnek az alosztalyok. Ha maga az ososztaly privat, akkor lehet ott dob hibat, amikor az alosztaly akar orokolni (tipp).
    Protected egy olyan privat dolog, amit lehet orokolni, de kivulrol szinten nem fersz hozza.

    5. Amennyire tudom, egy classon belul alapbol minden privat.

Új hozzászólás Aktív témák