Sunday 18 December 2016

accessibility - Private Member Access Java



Is the private member access at the class level or at the object level. If it is at the object level, then the following code should not compile



    class PrivateMember {

private int i;
public PrivateMember() {
i = 2;
}
public void printI() {
System.out.println("i is: "+i);
}
public void messWithI(PrivateMember t) {
t.i *= 2;
}

public static void main (String args[]) {
PrivateMember sub = new PrivateMember();
PrivateMember obj = new PrivateMember();
obj.printI();
sub.messWithI(obj);
obj.printI();
}
}



Please clarify if accessing the member i of obj within the messWithI() method of sub is valid


Answer



As DevSolar has said, it's at the (top level) class level.



From section 6.6 of the Java Language Specification:




Otherwise, if the member or
constructor is declared private, then
access is permitted if and only if it

occurs within the body of the top
level class (§7.6) that encloses the
declaration of the member or
constructor.




Note that there's no indication that it's restricted to members for a particular object.



As of Java 7, the compiler no longer allows access to private members of type variables. So if the method had a signature like public void messWithI(T t) then it would be a compiler error to access t.i. That wouldn't change your particular scenario, however.


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...