#java #class
#java #класс
Вопрос:
class outer
{
public void outerfunction()
{
private class inner // Line-1
{
public void showinner()
{
System.out.println("I am in Inner Class");
}
}
}
}
Строка-1: эта строка выдает ошибку.
Я знаю, пишу ли я abstract или Final для класса inner. тогда все в порядке. Почему класс inner не может быть закрытым?
Ответ №1:
private
Класс виден всем методам и вложенным классам в одном файле. Обычно вы считаете, что private сужает область использования, но в этом случае, используя private
вы, расширяете область where is класс виден так, как Java не поддерживает.
Сделать метод закрытым — это то же самое, что и сделать это
class outer {
private class inner { // Line-1
public void showinner() {
System.out.println("I am in Inner Class");
}
}
public void outerfunction() {
}
}
Это выглядит нормально, пока вы не учтете, что вложенный класс может использовать значения в своем внешнем контексте.
class outer {
public void printInner() {
// accessible in the same .java file because we made it private
inner i = new inner();
i.showInner(); // what should `x` be?
}
public void outerfunction(final int x) {
private class inner { // Line-1
public void showinner() {
System.out.println("I am in Inner Class, x= " x);
}
}
}
}
Комментарии:
1. Не могли бы вы объяснить немного больше? Спасибо!
2. метод @ShashankJain локальные классы в методе видны только этому методу, а не все в том же файле,
private
что и вложенные классы.3. Тогда почему разрешено Final ?
4.
final
является более строгим. Это означает, что он не может быть подклассом.5. final делает его не наследуемым