package com.gibe;
public class Ersatz {
public static void main(String[] args) {
// 外部其他类, 使用成员内部类三种方法
Outer outer = new Outer();
outer.mm();
// 外部instance.new
Outer.Inner inner = outer.new Inner();
inner.say();
// 外部类编写对象方法, 返回Inner对象
Outer.Inner instance = outer.getInstance();
instance.say();
//
Outer.Inner vv = new Outer().new Inner();
vv.say();
}
}
class Outer {
private int n = 11;
public String name = "Outer";
private void hi(Inner inner) {
System.out.println("Outer hi()");
System.out.println("inner: "+inner);
}
private static final void m() {
System.out.println("Outer static m()");
}
public final class Inner {
private double salary = 99.8;
private int n = 22;
public Inner() {
System.out.println(this);
}
public void say() {
System.out.println("n=" + n + " Outer.this.n=" + Outer.this.n);
hi(this);
m();
}
}
public Inner getInstance() {
return new Inner();
}
public void mm() {
Inner inner = new Inner();
inner.say();
}
}
package com.gibe;
public class Ersatz {
public static void main(String[] args) {
Outer outer = new Outer();
// outer.mm();
// 静态内部类, 可通过类名直接访问(满足访问权限)
Outer.Inner inner = new Outer.Inner();
inner.n();
// 通过Outer方法(static or non-static)
Outer.Inner inner1 = outer.getInner();
inner1.n();
Outer.Inner inner2 = Outer.getInner_();
inner2.n();
}
}
class Outer {
private int n = 11;
private static String name = "Outer";
private static void m() {
System.out.println("Outer static m()");
}
static class Inner {
private static String name = "Inner";
public void n() {
System.out.println("Inner name=" + name + " Outer.name=" + Outer.name);
m();
}
}
public void mm() {
Inner inner = new Inner();
inner.n();
}
public Inner getInner() {
return new Inner();
}
public static Inner getInner_() {
return new Inner();
}
}