2013-09-18 3 views
1

Просто для примера я помещаю в String как переменную-член. Но изначально существует сложная структура.private variable constraints java

public class ClassA { 

    private final String test ; 

    public ClassA(String str) { 
     test = str; 
    } 

    @Override public int hashCode() { 
     return test.hashCode(); 
    } 

    @Override public boolean equals(Object obj) { 
     return obj instanceof ClassA && test.equals(((ClassA)obj).test); 
    } 

} 


public class ClassB { 

    public static void main(String args[]) 
    { 
     ClassA obj1 = new ClassA("abc"); 
     ClassA obj2 = new ClassA("def"); 
     obj1.equals(obj2); 
     obj2.test;//not valid 
    } 
} 

Из того, что я знаю, что доступ к частной переменной test из obj1 есть только в методах ClassA и эти методы должны быть вызваны из контекста obj1.

Когда я вызывал obj1.equals(obj2), тестовую переменную obj2 можно получить из контекста obj1.

Итак, можем ли мы получить доступ к приватным переменным любого объекта типа ClassA из методов ClassA.

+0

Если они являются частными для вас (Class), вы можете получить доступ к ним. –

+1

Возможный дубликат [Private Member Access Java] (http://stackoverflow.com/questions/676930/private-member-access-java) – Sikorski

+0

«Итак, мы можем получить доступ к приватным переменным любого объекта типа ClassA из методов ClassA «. Да. –

ответ

0

Как вы пишете сами:

Так мы можем получить доступ к закрытым переменным любого объекта типа ClassA внутри методов CLASSA.

Это правильно.

0

Частные переменные экземпляра являются частными для класса, в котором они определены.

Это не означает, что они являются частными по отношению к например из значений переменных сохраняются в.

0

Следующей

Из того, что я знаю, что доступ к переменному тесту частному из obj1 является там только в методах ClassA, и эти методы следует называть из контекста obj1.

лишь частично правильно: метод может быть также статический метод в ClassA (не в контексте любого экземпляра ClassA), то есть вы звоните ClassA.staticMethod (obj1); и там у вас будет доступ к obj1.test.

Следующая имеет утвердительный ответ:

So can we access the private variables of any object of type ClassA from within ClassA methods? 
0

«частный» не означает, что частное от объекта, но частными по отношению к классу. Одной из основных причин использования частных полей является скрытие реализации, но не было бы смысла скрывать реализацию классов из самого класса.

Просто имейте в виду, что «ClassA» в данном случае действительно означает «ClassA only». Вы не сможете получить доступ к закрытым членам из подкласса ClassA.

0

Да, конечно. Спецификатор частного доступа не может остановить класс для доступа к своим переменным. Его независимо от каких-либо спецификаторов доступа. В противном случае, как будет работать ваш метод getter и setter.

Это фундаментальная инкапсуляция. Вы можете получить доступ к переменным одного класса, создав свой объект. но тот же класс по умолчанию имел бы доступ к своим членам.

Опять же, как кто-то правильно указал, что даже частные члены суперкласса не видны или недоступны его подклассу. но это другая концепция.

Вы можете пройти ниже хорошие статьи/блог

http://inheritingjava.blogspot.in/2011/01/chapter-4-access-modifiers.html

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html