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

  • 相关阅读:
    MT【160】格点
    MT【159】单调有界有极限
    c_str() 函数
    C strstr() 函数
    全面总结:matlab怎么做漂亮的图
    程序员电邮札记
    C编译: 使用gdb调试
    C编译: 动态连接库 (.so文件)
    C编译: makefile基础
    数据科学
  • 原文地址:https://www.cnblogs.com/zgj544/p/7675151.html
Copyright © 2011-2022 走看看