【发布时间】:2018-03-07 03:22:40
【问题描述】:
我最近遇到了一种罕见但完全合法的语法:Local Classes。
我想知道为什么我不能访问该方法之外的本地类?它与可以在外部类或封闭对象(outer.new Inner())中访问的内部类有什么不同?
示例:这是完全有效的,
//this is valid
public class Outer {
int outer_x = 100;
public void test() {
Inner inner = new Inner();
inner.display();
}
public class Inner {
public void display() {
System.out.println("Outer x is: " + outer_x);
}
}
}
这也是有效的
//this is valid as well
public class Outer {
int outer_x = 100;
public void test() {
Inner inner = new Inner();
inner.display();
}
public class Inner {
public void display() {
System.out.println("Outer x is: " + outer_x);
}
}
public void test2() {
Inner inner2 = new Inner();
inner2.display();
}
}
但这不会编译:
public class Outer {
int outer_x = 100;
public void test() {
class Inner {
public void display() {
System.out.println("Outer x is: " + outer_x);
}
}
Inner inner = new Inner();
inner.display();
}
public void test2() {
Inner inner2 = new Inner(); // error here
inner2.display();
}
}
为什么会这样?
【问题讨论】:
-
因为您无法访问仅在另一个方法中定义的类。你必须给它范围。
-
我知道!我的问题是“为什么”。
-
@EFFKAY 与
inner声明的方法之外无法访问的原因相同。范围。 -
@smac89 啊,but you can.
-
一个仅限于方法的范围,因为那是你声明它的地方。
标签: java nested inner-classes