zoukankan      html  css  js  c++  java
  • 内部类

    目录

    • 为什么要使用内部类
    • 内部类的种类
      • 普通内部类
      • 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
  • 相关阅读:
    Benchmark Web App 性能瓶颈分析与性能测试工具的使用方法总结
    如何永久删除git仓库中敏感文件的提交记录
    javascript中的this在不同场景下的区别
    利用jsPDF有效减轻报表型应用服务器的IO负载
    nginx与apache的参考配置
    统计学中相关数学符号、希腊字母的标准读法
    C++的子类与父类强制转换产生的问题
    获得潜在新用户联系方式的妙招
    团队工作效率分析工具gitstats
    你被R语言的=和<-搞昏了头吗
  • 原文地址:https://www.cnblogs.com/s3abiscuit/p/7337965.html
Copyright © 2011-2022 走看看