类中类.

为什么使用内部类:

  • 对同一包的其他类隐藏
  • 内部类可以访问外部类的私有数据

6.3.1 使用内部类访问对象状态

  1. package chapter06;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. public class TalkingClock {
  5. private int interval;
  6. private boolean beep;
  7. public TalkingClock(int interval, boolean beep) {
  8. this.interval = interval;
  9. this.beep = beep;
  10. }
  11. // 内部类
  12. public class TimePrinter implements ActionListener {
  13. @Override
  14. public void actionPerformed(ActionEvent e) {
  15. }
  16. }
  17. }

可以直接使用外部类的字段:

  1. package chapter06;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. public class TalkingClock {
  5. private int interval;
  6. private boolean beep;
  7. public TalkingClock(int interval, boolean beep) {
  8. this.interval = interval;
  9. this.beep = beep;
  10. }
  11. // 内部类
  12. public class TimePrinter implements ActionListener {
  13. @Override
  14. public void actionPerformed(ActionEvent e) {
  15. System.out.println(beep);
  16. }
  17. }
  18. }
  • 有指向外部对象的隐式引用

image.png

  • 编译器自动添加引用, outer.beep

6.3.2 内部类的特殊语法规则

显式引用外部类:

image.png

显式引用内部类进行构造:

  1. ActionListener listener = this.new TimePrinter();

创建 public 的内部类的对象:

image.png

6.3.3 内部类是否有用, 必要和安全