Лучший и самый полезный ответ зависит от контекста вопроса, который, я считаю, не совсем очевиден.
Если вопрос был начинающим вопросом о предназначенном значении частного, то ответ «нет» является полностью уместным. То есть:
- частные члены A доступны только в классе A
- закрытые для пакета члены A доступны только внутри классов в пакете A
- защищенные члены A доступны только внутри классов в пакете A и подклассов A
- открытые члены A доступны везде, где виден A.
Теперь, , если , и хорошо, может быть, это натяжение (спасибо Брайану :)), что вопрос возник из более «продвинутого» контекста, когда кто-то смотрит на вопрос «Я знаю» «личное» означает «личное», но есть ли языковая лазейка », тогда, ну, - это такая лазейка. Это выглядит так:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
class C {
private int x = 10;
private void hello() {System.out.println("Well hello there");}
}
public class PrivateAccessDemo {
public static void main(String[] args) throws Exception {
C c = new C();
List<Field> fields = Arrays.asList(C.class.getDeclaredFields());
for (Field f: fields) {
f.setAccessible(true);
System.out.println(f.getName() + " = " + f.get(c));
}
List<Method> methods = Arrays.asList(C.class.getDeclaredMethods());
for (Method m: methods) {
m.setAccessible(true);
m.invoke(c);
}
}
}
Выход:
x = 10
Well hello there
Конечно, это действительно не то, что прикладные программисты когда-либо делали бы. Но тот факт, что такую вещь можно сделать , стоит знать, а не то, что следует игнорировать. ИМХО в любом случае.