java笔记14:面向对象-内部类
1.内部类
1)什么是内部类
- 一个类的内部创建的类
我们将外部类称为Outer 将内部类称为Inner
2)怎么定义内部类
1. 成员内部类
- 在类的成员位置声明的内部类
class Outer{
class Inner{
}
}
- 1.1)成员内部类能使用四种访问修饰符修饰
- 1.2)内部类和外部类的私有属性互相可以访问
1.3)当外部类和内部类的成员同名时 内部类中直接调用是内部类的成员 要想调用外部类的成员需要
* <外部类名>.this.<成员>
- 1.4)一般情况下 内部类的使用只在外部类中 通过内部类减少java文件的数量
- 1.5)每个内部类都会有自己独立的 class文件 格式为 外部类名$内部类名.class
2.匿名内部类
SuperType obj=new SuperType() {
//需要被重写的方法
}
一般情况下匿名内部类 指在方法中通过继承类或实现接口 来编写的没有名字的内部类
- 2.1)外部类的私有属性匿名内部类可以使用
- 2.2)外部类和内部类的成员如果重名 直接调用是内部类的 要想调用外部类类 <外部类名>.this.<成员>
- 2.3)匿名内部类是在方法中就地 编写某个类的子类 并且自动向上造型; 只能使用在声明它的方法中。
- 2.4)当需要继承一个父类 而且这个子类对象只使用一次时 就可以在要使用这个子类对象的位置通过匿名内部类来实现
- 2.5)每个内部类都会有自己独立的 class文件 格式为 外部类名$自动生成的编号.class
- 2.6)匿名内部类中如果要使用 它所在方法的局部变量 必须将这个局部变量视为被 final修饰的
- 2.7)JDK1.7以及1.7之前 在匿名内部类中使用 它所在方法的局部变量 必须将这个局部变量设置为 final修饰才可以
2.计时器
1)什么是计时器
- 能按照约定好的时间间隔
- 周期性的调用指定方法的对象
2)怎么定义计时器
- Timer tim=new Timer();
3)定义要调用的指定方法
- 使用匿名内部类实现一个 TimerTask类的子类
- 重写类中的run方法
4)启动计时器
- Timer对象的schedule方法
- 启动计时器周期调用方法即可
通过编写计时器的代码 实现每隔1000毫秒 从1开始输出数字 一直输出,越输出越大
Timer tim=new Timer();
TimerTask task=new TimerTask() {
int i=1;
public void run() {
System.out.println(i);
i++;
}
};
tim.schedule(task, 3000,500);