2013-04-12 11 views
9

Mam klasę z metodą, która ma być dostępna tylko dla jej obiektów podrzędnych, a nie dla innych klas w tym pakiecie.Java między prywatnym i chronionym

Modifier | Class | Package | Subclass | World 
————————————+———————+—————————+——————————+——————— 
public  | ✔ | ✔ | ✔  | ✔ 
————————————+———————+—————————+——————————+——————— 
protected | ✔ | ✔ | ✔  | ✘ 
————————————+———————+—————————+——————————+——————— 
no modifier | ✔ | ✔ | ✘  | ✘ 
————————————+———————+—————————+——————————+——————— 
private  | ✔ | ✘ | ✘  | ✘ 
____________+_______+_________+__________+_______ 
my Modifier | ✔ | ✘ | ✔  | ✘ 
____________+_______+_________+__________+_______ 

Czy istnieje obejście tego rodzaju modyfikatora?

Być może istnieje sposób, aby stworzyć pakiet końcowy, więc inni programiści nie mogą dodawać żadnych zajęć do mojej paczki?

Czy istnieje sposób na pobranie instancji, która wywołała funkcję i sprawdzenie, czy jest to instancja mojego obiektu super?

A może po prostu trzeba go zostawić i po prostu użyć chronione, a programiści mogą dodawać inne zajęcia do mojego pakietu ...

+1

+1 dla ASCII malować – mKorbel

+0

@m Korbel zdecydowanie, OP najwyraźniej włożył w to dużo wysiłku =) – Juvanis

+0

@mKorbel Rozszerzyłem ten tabelę ascii z [this] (http://stackoverflow.com/questions/215497/in-java-whats-the-difference-between -publiczny-domyślny-chroniony-i-prywatny? rq = 1) wątek: – Jetse

Odpowiedz

6

1) nie można tworzyć niestandardowe acceess modyfikator w Javie

2) można uszczelnić pakiet w słoiku, patrz http://docs.oracle.com/javase/tutorial/ext/security/sealing.html

3) można znaleźć klasę telefonicznej, spróbuj

public static void main(String[] args) throws Exception { 
    xxx(); 
} 

static void xxx() { 
    Class[] cc = new SecurityManager() { 
     @Override 
     protected Class[] getClassContext() { 
      return super.getClassContext(); 
     } 
    }.getClassContext(); 
    System.out.println(cc[cc.length - 1].getName()); 
} 
Powiązane problemy