java内部类基础(内部类继承关系 或外部类整体继承)

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();
   }
  }
 }
}

 

转载于:https://my.oschina.net/u/1182621/blog/146503

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值