Junior — Middle
Lehet-e egy osztály privát metódusát kívülről hívni?
sobes.tech MI
Válasz az MI-től
Java-ban nem lehet közvetlenül hívni egy osztály privát metódusát annak definícióján kívülről, mivel a private módosító csak az osztályon belül teszi elérhetővé.
Azonban a reflexió segítségével hozzáférhetünk a privát metódusokhoz és meghívhatjuk azokat, még ezek korlátozásai ellenére is. Például:
import java.lang.reflect.Method;
class MyClass {
private void secret() {
System.out.println("Privát metódus hívva");
}
}
public class Test {
public static void main(String[] args) throws Exception {
MyClass obj = new MyClass();
Method method = MyClass.class.getDeclaredMethod("secret");
method.setAccessible(true); // eltávolítja a hozzáférési korlátozást
method.invoke(obj); // privát metódus hívása
}
}
Így a normál hívás nem lehetséges, de a reflexió lehetővé teszi ennek a korlátozásnak az áthidalását.