• java 内部类的继承


    Think in Java P268

    因为内部类构造必须关联到外部类的引用,所以主要问题是如何构建派生类构建一个外部类的引用。

    public class InheritInner extends WithInner.Inner{
        InheritInner(WithInner wi) {
            wi.super();
        }
    }
    class WithInner
    {
        class Inner
        {
    
        }
    }

    关键代码,在内部类派生中,传入外部类的引用,并使用外部类的引用.super()方法。

    如果没有wi.super() 报错,no enclosing instance type of  ,没有封闭的实例类型

    那么这个wi.super()真正的作用是什么呢。

    public class Computer {
    
        int model;
    
        Computer(int i) {
            model = i;
        }
    
        public class HardDrive {
            int size;
    
            public HardDrive(int i) {
                size = i;
            }
    
            public HardDrive() {
                size = 40;
            }
            @Override
            public String toString() {
                return "HardDrive    size  "+size;
            }
        }
    
        @Override
        public String toString() {
            return "Computer    model  "+model;
        }
    
        public static void main(String[] args) {
            Computer computer = new Computer(10);
            SCSI   scsi = new SCSI(computer);
    System.out.println(computer); System.out.println(scsi.size); } }
    class SCSI extends Computer.HardDrive { SCSI(Computer c) { c.super(80); } }

    输出结果:

    Computer model 10
    80

    我们知道,实例子对象时,父类的对象也会实例化。

    所以例子中 Computer.HardDrive 也会被实例化,而且是带参数的实例化,输出的结果也表明了它被正确的实例化了。

    所以我猜测Object.super()的作用是把HardDrive实例化了

  • 相关阅读:
    CSS Frameworks Collection(css框架收集)
    CSS:IE与Firefox的CSS兼容大全
    一般的 DIV + CSS 三栏式排版
    C#获取与修改HTML DOM元素信息
    101 LINQ Samples
    IE,Firefox,Chrome都可用的阴影效果
    QT中字符串编码的选用
    QT中字符串及其编码
    QT多项目编译顺序
    QT字符串编码知识汇编
  • 原文地址:https://www.cnblogs.com/alway-july/p/7513761.html
Copyright © 2020-2023  润新知