1、内部类:

有什么用?

1、可以访问该类定义所在作用域中的数据,包括私有数据。

2、当想定义一个回调函数而不想编写大量代码时,使用匿名内部类比较便捷。

3、内部类可以对同一个包中的其他类隐藏起来。

什么时候用?

1、想省代码

2、想访问本类数据

3、想隐藏数据(要写的类,仅被一个类使用一次)

简单内部类举例

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; /**
* Created by xkfx on 2017/2/12.
*/
public class InnerClassTest{
public static void main(String[] args){
TalkingClock clock = new TalkingClock(1000 , true); //参数改成100系统不响铃
clock.start(); JOptionPane.showMessageDialog(null , "Quit?"); //没有这两行代码,程序无法运行???
System.exit(0);
}
} class TalkingClock{
private int interval;
private boolean beep; public TalkingClock(int interval, boolean beep){
this.interval = interval;
this.beep = beep;
} /**
* Starts the clock
*/
public void start(){
ActionListener listener = new TimePrinter();
Timer t = new Timer(interval , listener);
t.start();
} private class TimePrinter implements ActionListener{ //设置成private就实现了封装 //这里有一个不可见的隐式引用 outer = 外围类对象
//下面的beep等价于 outer.beep
//TimePrinter有一个隐式的构造器 public TimePrinter(TalkingClock clock){ outer = clock; } @Override
public void actionPerformed(ActionEvent e) {
System.out.println("...");
if(beep) Toolkit.getDefaultToolkit().beep(); //内部类可以访问外围类对象的数据域
}
}
}

内部类的语法规则

局部内部类

:在一个方法中定义类

匿名内部类

:例如

public void start(int interval, boolean beep)
{
ActionListener listener = new ActionListener(){
public void actionPerformed(ActionEvent event){
System.out.println("...");
if(beep){
Toolkit.getDefaultToolkit().beep();
}
}
};
Timer t = new Timer(interval, listener);
t.start();
}

如何将静态内部类镶嵌在辅助类中

2、代理

有什么用?

可以在运行时创建一个实现了一组给定接口的新类。

只有在编译时无法确定需要实现哪个接口时才有必要使用。

什么时候用?

corejDay1的更多相关文章

随机推荐

  1. xtrabackup安装部署(二)

    在官网中,复制相关链接下载最新版本(建议使用当前发布版本前6个月左右的稳定版本) https://www.percona.com/downloads/XtraBackup/LATEST/ 1.下载和安 ...

  2. 数据库outer连接

    left (此处省略outer) join, 左边连接右边,左边最大,匹配所有的行,不管右边 right join,右边连接左边,右边最大,匹配所有的行,不管左边 条件直接放ON后面,是先筛选右边的表 ...

  3. Linux/Unix命令行安装weblogic软件

    --通过java -jar wls1036_generic.jar启动安装weblogic软件进程: [weblogic@localhost mnt]$ java -jar wls1036_gener ...

  4. threading.Condition()

    threading — Thread-based parallelism — Python 3.7.2 documentation https://docs.python.org/3/library/ ...

  5. complexity_action

    大话数据结构 /* 顺序存储的结构 */ #define MAXSIZE 20 //存储空间初始分配量 typedef int ElemType; //ElemType类型根据实际情况而定,这里假设为 ...

  6. python全栈开发目录

    python全栈开发目录 Linux系列 python基础 前端~HTML~CSS~JavaScript~JQuery~Vue web框架们~Django~Flask~Tornado 数据库们~MyS ...

  7. 完美解决onchange不能实时的监听

    我们大家都知道onchange有时候很不好用,因为onchange事件是离开焦点后才会被触发,而不是实时去监听! 那么oninput()事件和onpropertychange()完美的解决了问题:(o ...

  8. idea导出war包并在tomcat上部署

    生成war包 (一)进入项目配置页面 然后到达: (二)选择 设置好路径 然后apply (三)生成 然后再指定的目录就可以看见war包了. 部署到tomcat上 (一)将war包拷贝到tomcat的 ...

  9. 启动spark-shell

    $cd /app/hadoop/spark-1.1.0/bin $spark-shell --master spark://SPARK02:7077 --executor-memory 500m 特别 ...

  10. 程序猿职业生涯中的 Norris 常数

    我的朋友Clift Norris发现了一个基本常数.我称之为Norris常数,一个未经培训的程序猿在他或她遇到瓶颈之前能写出的平均代码量.Clift预计这个值是1500行. 超过这个数以后,代码会变得 ...