Обратите внимание на следующий код:
class A {
B[] arr = new B[10];
private class B {}
}
class C {
void fun(){
A a = new A();
Object arr = a.arr;
Object len = a.arr.length; // !! ERROR
}
}
Как я написал в коде. a.arr.length;
дает ошибку.
Я действительно понимаю, почему это происходит. Это связано с тем, что подкласс B
является закрытым. Но все же, почему это происходит. В классе A свойство arr
было доступно, но почему бы и нет. Есть ли объяснение этому в jls или где-нибудь.
Я просто хочу дать четкое объяснение этому поведению. Я знаю, что личные вещи не могут быть доступны за пределами своего класса. Но публичный массив может быть. Независимо от того, какой он тип. И если что-либо доступно снаружи, необходимо также получить доступ к его публичным свойствам. Но здесь этого не происходит.
Изменить: Я обнаружил, что в С# даже невозможно создать массив частного класса. В java, если мы не можем получить доступ к чему-либо, и даже не можем знать длину массива частного класса, тогда используется создание массива частного класса.