zoukankan      html  css  js  c++  java
  • java内部类继承--构造函数传参

    /: innerclasses/InheritInner.java
    // Inheriting an inner class.
    
    class WithInner {
      class Inner {}
    }
    
    //继承内部类
    public class InheritInner extends WithInner.Inner {
      //! InheritInner() {} // Won't compile
      
      InheritInner(WithInner wi) {
        wi.super();
      }
      public static void main(String[] args) {
        WithInner wi = new WithInner();
        InheritInner ii = new InheritInner(wi);
      }
    } ///:~
    求问这段代码中,InheritInner 继承自内部类Inner,为什么在实现构造的时候要向其中传递参数wi,wi.super()是必须要调用的吗?

    要理解这个问题就得先理解内部类,Inner是WithInner的内部类,那么一般的用法
    WithInner.Inner inner = new WithInner(). new Inner() ;
    我们可以看出要想创建Inner的对象必须先创建WithInner的对象之后才能创建Inner对象,那么现在你要用一个类InheritInner继承Inner类,在继承过程中构造方法会被调用,即使你不写也会调用默认构造方法,但问题出现了,在调用父类Inner构造方法时找不到WithInner的对象,所以就必须给InheritInner类的构造方法传入WithInner对象再通过wi.super();方法调用Inner的默认构造方法,因为这是创建对象的基本流程,所以这句话wi.super();是必须的。


  • 相关阅读:
    Linux零拷贝技术 直接 io
    纯Python模式
    c 越界 数组越界
    哈希 二叉树
    Cache busting
    sub esp
    lisp 代码即数据
    hexdump
    nmap
    对象 闭包
  • 原文地址:https://www.cnblogs.com/xunbu7/p/5220523.html
Copyright © 2011-2022 走看看