• 内部类


    目录

    • 为什么要使用内部类
    • 内部类的种类
      • 普通内部类
      • static内部类
    • 普通内部类的实例化方式
      • 需要借助外部类对象
        • 外部类方法中返回(使用new实例化)
        • 外部类对象直接new
    • 封装内部类
      • 实现接口
      • 隐藏实现细节
      • 不能使用外部类对象new一个实例(类比private属性只能通过方法实例化)
    • 匿名内部类
      • 定义内部类同时实例化内部类对象
    • 内部类的本质

    为什么要使用内部类

    • 获取外部类成员的访问权限
      • 本质是内部类对象拥有外部类对象的引用
    • 实现多重继承

    内部类的种类

    • 普通内部类
      • 需要借助外部类对象才能实例化
      • 内部类对象拥有外部类对象的引用
        • 所以内部类对象可以获得外部类对象的引用
        • 通过this关键字
      • 就像子类对象拥有父类对象的引用
      • 所以子类对象实例化之前,先实例化父类对象
    • static内部类
      • 不依赖外部类对象即可实例化

    普通内部类实例化方式

    • 通过在外部类定义方法返回内部类实例
    • 使用new关键字(private内部类不能使用此方法)
      Outer outer = new Outer();
      Outer.Inner inner = outer.new Inner();

    匿名内部类

    • 匿名内部类在创建类的同时实例化了对象
    • 匿名内部类可以显示定义基类
    • 传入匿名内部类的参数必须声明为final(除传入基类的参数外)
    • 匿名内部类实例初始化的实际效果就是构造器

    内部类的本质

    注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同。

    内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。

    Three passions, simple but overwhelmingly strong, have governed my life: the longing for love, the search for knowledge, and unbearable pity for the suffering of mankind
  • 相关阅读:
    MariaDB · 版本特性 · MariaDB 的 GTID 介绍
    stm8s 中断重复进入
    PCB积累
    链表的创建、增加、删除、改数据、遍历
    百度文库文字下载工具指引
    防倒灌的开关电路
    AD快速从原理图查找pcb中元件
    三目运算符填坑
    嵌入式结构化分层思想
    原码,反码,补码
  • 原文地址:https://www.cnblogs.com/s3abiscuit/p/7337965.html
Copyright © 2020-2023  润新知