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
As DevSolar has said, it’s at the (top level) class level.
From section 6.6 of the Java Language Specification:
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 <T extends PrivateMember> void messWithI(T t)then it would be a compiler error to accesst.i. That wouldn’t change your particular scenario, however.