class Outer
{
int x=10;
class Inner
{
void show()
{
System.out.println(x);
}
}
public static void main(String args[])
{
Outer obj=new Outer();
Inner obj1=new Outer().new Inner();
obj1.show();
}
}
我尝试创建一个非静态嵌套类,并尝试在非静态内部类中使用外部类的非静态数据成员。如果x是非静态的,我没有得到它,我如何使用它没有对象。请给我答案?
答案 0 :(得分:1)
你不在没有对象的情况下使用它。内部(非静态嵌套)类具有对外部对象的引用,其中使用了var fibs = ArraySlice([1, 1])
var fibGenerator = GeneratorOf{
_ -> Int? in
fibs.append(fibs.reduce(0, combine:+))
return fibs.removeAtIndex(0)
}
println(fibGenerator.next())
println(fibGenerator.next())
println(fibGenerator.next())
println(fibGenerator.next())
println(fibGenerator.next())
println(fibGenerator.next())
。
答案 1 :(得分:1)
内部类只是一个语法糖,可以隐式引用外部类。在内部(在javac编译之后),您的类Inner
看起来像这样:
static class Inner
{
private final Outer this$0;
public Inner(Outer outer) {
this$0 = outer;
}
void show()
{
System.out.println(this$0.x);
}
}
当您编写Inner obj1=new Outer().new Inner();
时,编译器会将其更改为Inner obj1=new Inner(new Outer());
。