2014-02-13 9 views
6
package geometry; 

public class Hypotenuse { 
    public InnerTriangle it = new InnerTriangle(); 

    class InnerTriangle { 
     public int base; 
     public int height; 
    } 
} 

Какое утверждение верно о классе объекта, который может ссылаться на переменную базу?доступ к локальной переменной во внутреннем классе

A. Это может быть любой класс.

B. Класс не имеет доступа к базе.

C. Класс должен принадлежать пакету геометрии.

D. Класс должен быть подкласс класса Гипотенуза

Это из SCJP отвалов, Ответ «C». Поскольку мой ответ на знание должен быть «B», потому что внутренний класс имеет локальную переменную, называемую «базой», и имеет область действия только во внутреннем классе. Даже если я хочу переменную usethis в классе «geometry», мне не разрешено это делать.

Прошу вас, если я ошибаюсь?

+0

По этому аргументу никакое поле не может быть доступно в другом файле класса, так как оно также выходит за пределы области. –

+0

'it.base' может вызываться локальными классами пакетов (так как InnerTriangle является локальным именем пакета). –

ответ

4

Класс InnerTriangle имеет область «уровень пакета», так как вы не указали явный модификатор доступа. Это означает, что членам класса, а также членам пакета разрешен доступ к классу.

Именно поэтому «С» - правильный ответ.

0

base является общедоступной переменной, а внешний класс является публичным классом. Поэтому все классы в классе внутреннего класса будут иметь к нему доступ. Внутренний класс имеет размер пакета, поэтому область base - это пакет.

Смежные вопросы