(编辑整理中...)
QUESTION NO: 4
1. public class Outer{
2. public void someOuterMethod() {
3. // Line 3
4. }
5. public class Inner{}
6. public static void main( String[]argv ) {
7. Outer o = new Outer();
8. // Line 8
9. }
10. }
Which instantiates an instance of Inner?
A. new Inner(); // At line 3
B. new Inner(); // At line 8
C. new o.Inner(); // At line 8
D. new Outer.Inner(); // At line 8//new Outer().new Inner()
答案如下:
publicclass
Outer {
publicvoid
someOuterMethod() {
// Line 3
new
Inner();
//
放在这里不出错
}
publicclass
Inner {
}
publicstaticvoid
main(String[] argv) {
Outer o=
new
Outer();
// Line 8
//o
不能够被解释成为一种类型,出错
//new o.Inner();
/**
*
下面两种用法,都报下面的错误:
*
No
enclosing
instance
of
type
Outer
is
accessible.
*
Must
qualify
the
allocation
with
an
enclosing
instance
*
of
type
Outer(e.g.
x.new
A()
where
x
is
an
instance
of
Outer)
*/
//new Outer.Inner();
//new Inner();
}
}
1.关键字 .this与.new (ref:
http://www.iteye.com/topic/442435)
public class Outer {
private int num;
public Outer() {}
public Outer(int num) {
this.num = num;
}
private class Inner {
public Outer getOuter() {
return Outer.this;
}
public Outer newOuter() {
return new Outer();
}
}
public static void main(String[] args) {
Outer test = new Outer(5);
Outer.Inner inner = test.new Inner();
Outer outer = inner.getOuter();
Outer outer2 = inner.newOuter();
System.out.println(outer.num);
System.out.println(outer2.num);
}
}
输出结果:
5
0