zoukankan      html  css  js  c++  java
  • 《Java核心技术(卷一)》读书笔记——第六章:内部类

    1.      内部类的概念?

    类中类

    2.      为什么要用内部类?

    内部类的方法可以访问外部类的实例域

    内部类对外部类的同一个包中的类实现了隐藏

    匿名内部类在“想要定义一个回调函数却又不想编写大量代码”时非常便捷

    3.      内部类语法详谈(常规)

    1.       内部类与外部类是类之间的关系,不是对象之间的关系

    虽然TimePrinter类位于TalkingClock类的内部,但这并不意味着,每个TalkingClock对象都有一个TimePrinter实例域。因为,TimePrinter对象是由start方法构造的,亦即,如果TalkingClock对象不调用start方法,便不拥有一个TimePrinter实例域。

    2.       内部类既可以访问自己的数据域,又可以访问创建它的外部类对象的实例域

    3.       内部类的隐式引用:指向外部类对象(编译器负责)

    if ( beep )——》if ( outer.beep)    //outer仅用作示意,编译器内部当然不会是outer

    指向外部类的隐式引用在构造器中设置。编译器修改了内部类所有的构造器,添加一个引用外部类的参数。即使并没有定义内部类的构造器,编译器也会为内部类生成一个默认的构造器。如:publicTimePrinter(TalkingClock clock) { outer = clock; }

    当在start方法中创建了内部类对象后,编译器就会将this引用传递给当前的构造器

    ActionListenerlistener = new TimePrinter(this)

    4.       将内部类声明为 private,实现对外隐藏,只有外部类可以构造内部类对象

    5.       在外部类的作用域之外引用内部类

    outerClass.InnerClass

    4.      内部类的特殊语法:如何正确使用外部类引用参数

    a)        内部类访问外部类实例域

    if( beep )——》if( TalkingClock.this.beep );

    b)        内部类构造器

    ActionListener listener = this.new TimePrinter();

    /* 通过这种方法构造的内部类,它的隐式引用与this指向了同一对象 */

    c)        通过显示命名,将外部类引用设置为其他对象

    下述代码,在TimePrinter公有的情况下,任意外部类都可以构造一个TimePrinter

    TalkingClockjabber = new TalkingClock(1000, true)

    TalkingClock.TimePrinter listener = jabber.newTimePrinter()

    录自http://blog.csdn.net/Reese1995/article/details/77848502?ref=myread

  • 相关阅读:
    (转)性能测试---并发用户理解
    (转)基于DDD的现代ASP.NET开发框架--ABP分层架构
    (转)Web自动化测试中的接口测试
    (转) 一致性Hash算法在Memcached中的应用
    Memcached工作原理及常见问题
    Memcached介绍及相关知识
    .net 面试题总结
    使用IDEA工具配置和运行vue项目(详细其中的坑)
    关于伪分布zookeeper集群启动出错(Error contacting service. It is probably not running.)
    常用查找和排序
  • 原文地址:https://www.cnblogs.com/zgj544/p/7675151.html
Copyright © 2011-2022 走看看