class WithInner {
class Inner {
Inner() {
System.out.println("this is a constructor in WithInner.Inner");
};
}
}
//默认无参构造器不好使 。有参构造器,传递外部类,用外部类的supper()去构造。
public class InnerExtendsT extends WithInner.Inner {
//InnerExtendsT() {} // Won't compile
//必须传递 外部类的引用,并调用supper()才可以。
InnerExtendsT(WithInner wi) {
wi.super();
System.out.println("this is a constructor in InheritInner");
}
public static void main(String[] args) {
WithInner wi = new WithInner();
InnerExtendsT ii = new InnerExtendsT(wi);
}
}
————————————————————————————————————————————
class Egg {
private Yolk y;// 蛋黄
protected class Yolk {
public Yolk() {
System.out.println("Egg.Yolk()");
}
}
public Egg() {
System.out.println("New Egg()");
y = new Yolk();
}
}
//当你继承了某个外围类的时候,内部类并没有发生什么特别神奇的变化。这两个内部类是完全独立的两个实体,各自在自己的命名空间内。
public class MultiExtends extends Egg {
public class Yolk {//重构了 它自身的 内部类,但是 实际上 基类的内部类并没有变化 虽然是大鸡蛋,但是还是小蛋黄
public Yolk() {
System.out.println("BigEgg.Yolk()");
}
}
public static void main(String[] args) {
new MultiExtends();
}
}
——————————————————————————————————————————————
class Egg2 {
protected class Yolk {
public Yolk() {
System.out.println("inner class initialize beforing......class initialing....");
System.out.println("Egg2.Yolk()");
}
public void f() {
System.out.println("Egg2.Yolk.f()");
}
}
public Egg2() {
System.out.println("New Egg2()");
}
private Yolk y ;// = new Yolk();构造过程之前进行引用对象的处理。
public void insertYolk(Yolk yy) {
y = yy;
}
public void g() {
if(y == null){
y = new Yolk();//运用的时候,再创建。
}
y.f();
}
}
public class MultiExtends2 extends Egg2 {
public class Yolk extends Egg2.Yolk {//强制继承 鸡蛋的蛋黄
public Yolk() {
System.out.println("BigEgg2.Yolk()");
}
public void f() {
System.out.println("BigEgg2.Yolk.f()");
}
}
/**
* 父类对象的引用的处理
*/
public MultiExtends2() {
System.out.println("kkkkkk");
insertYolk(new Yolk()); //重新设置之后,调用新的对象。
}
public static void main(String[] args) {
Egg2 e2 = null;
e2 = new MultiExtends2();
e2.g();
}
}
————————————————类嵌套——————————————————————————
public class MultiNestingAccess {
public static void main(String[] args) {
MNA mna = new MNA();
MNA.A mnaa = mna.new A();
MNA.A.B mnaab = mnaa.new B();
mnaab.h();
}
}
class MNA {
private void f() {
}
class A {
private void g() {
}
public class B {
void h() {
g();
f();
}
}
}
}