JAVA-ban ezt hogy lehet megoldani?
Illusztrációnak:
public class Test{
private int a;
public Test(){a = 0;}
public Test(int a) {this.a = a;
public set(int a){this.a = a;}
}
public class Test2 extends Test{
public Test2(){super(0);}
...
}
És azt szeretném elérni, hogy a programban egy Test2 objektumra ne lehessen meghívni az ősosztály metódusait csak közvetetten, a Test2 definícióján belül.
Tehát ha pl a Test2-ben nincs set() művelet, akkor a feltéve hogy t2 olyan típusú objektum, a t2.set(3); hibát dobjon.
Viszont az ősosztályt is lehessen használni.










Tehát, ha jól értem.
Van egy Test osztályod, ennek a metódusait publikusan hívhatónak akarod.
És van egy Test2 osztályod, amit leszármaztatsz a Test osztályodból, de nem akarod használni, csak azokat a metódusokat, amiket a Test2-ben külön definiálsz.
Ilyet tudtommal nem tudsz megcsinálni Java-ban, sőt, igazából sehol nem tudod megcsinálni. A legközelebbi, ami eszembejut, az a C++, ahol lehetőséged van protected vagy private származtatással levezetni a származtatott osztályt, de ekkor az ősosztály ÖSSZES public és protected metódusa protected/private lesz a származtatott osztályban. Igazából fel is vetül a kérdés: Miért akarsz származtatni egy ősosztályból, ha nem akarsz semmilyen metódust közvetlen abból elérhetővé tenni a származtatott osztályban?
C++ működik a dolog, csak Java-ban is meg szerettem volna valósítani. Igazából csak gyakorlásképp csinátam egy láncolt listát és ehhez egy leszármazott osztályt, vermet.
Ott tök jól működik, míg a láncolt listába bárhova lehet beszúrni elemeket, előre, hátra, adott indexre, addig a verembe csak előre, ami nevezetesen az ősosztály popFront() metódusát hívja meg, törölni is csak az elsőt lehet.
Javaban is szerettem volna ezt megcsinálni, de akkor lehet sajnos ezt itt nem lehet. Míg C++ ott van, hogy
class XY public/private/protected XYZ, addig Javaban, csak az extends kulcsszó.
Java nyelvet csak nemrég kezdtem el tanulgatni pár hete és sok helyzetben bizonytalan vagyok még, hogy hogyan lehet, hogyan kellene, lehet-e egyáltalán olyat csinálni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!