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. 洛谷P2463 Sandy的卡片【后缀数组】【二分】

    题目描述 Sandy和Sue的热衷于收集干脆面中的卡片. 然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型. 每一张卡片都由一些数字进行标记,第i张卡片的 ...

  2. PyQT5-QSlide滑块

    """ QSlider:是一个小滑块组件,这个小滑块能够被拖着一起滑动,用于通常修改具有一定范围的数据 Author: dengyexun DateTime: 2018. ...

  3. iOS判断UIView是否显示在屏幕上

    @interface - (BOOL)isDisplayedInScreen; @end @implementation UIView(UIScreenDisplaying) //判断View是否显示 ...

  4. version `GLIBC_2.14' not found问题

    先对比下源码编译.RPM 包和 YUM 三种安装方法的优劣: 源码编译:可以自行指定编译参数,自由度高,略显麻烦.但是如果不安装最新版本,BUGs 和 CVEs 是不会被修复的,和咸鱼没什么差别: R ...

  5. Cocoa 集合类型:NSPointerArray,NSMapTable,NSHashTable

    iOS 中有很多种集合类型,最为常见的可能就 NSArray.NSDictionary.NSSet,但其实还有 NSPointerArray.NSMapTable.NSHashTable 等类型,虽然 ...

  6. 解决windows7笔记本下玩游戏的显示问题

    笔者是Windows7操作系统的粉丝,我的本本同样也是win7系统,和大家一样喜欢界面豪华漂亮,但包括笔者在内的不少用户总埋怨,在玩游戏时,游戏画面居中屏幕两边是黑条,无法全屏显示游戏画面.对于这个问 ...

  7. 【python-opencv】19-Canny边缘检测

    Canny 边缘提取的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是: 好的检测- 算法能够尽可能多地标识出图像中的实际边缘. 好的定位- 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近 ...

  8. 【Python练习】文件引用用户名密码登录系统

    一.通过txt文件引入用户名密码 1 #coding=utf-8 from selenium import webdriver #from selenium.common.exceptions imp ...

  9. windows dos命令大全

    windows dos命令大全 一.windows DOS命令概述 Windows的dos命令又是Windows的CMD命令.而cmd命令又是原来MS-DOS系统保留下来. DOS来源路径与配置对应的 ...

  10. mysql 约束条件目录

    mysql 约束条件 mysql 约束条件 not null与default mysql 约束条件 unique key 唯一的键 mysql primary key 主键 mysql auto_in ...