内部类
定义在类内部的类。
用于在外部类中封装类的定义。
内部类可以共享外部类的属性和方法。
如:定时器任务的实现,经常采用内部类实现。
匿名内部类也称为匿名类
语法非常简洁:new类名(构造器参数){方法体}
匿名类容易与创建对象混淆。创建对象:new类名(参数)
匿名类是继承父类型并且同时实例化为子类对象,没有子类类名。
匿名类可以继承类,继承抽象类,也可以实现接口。
匿名类语法简洁,工作中非常常用。
书写时要注意括号配对情况。
package day04;
import java.util.Timer;
import java.util.TimerTask;
/*
* 内部类,在类内部定义的类
* 内部类主要用于,封装一个类的声明在类的内部,减少类的暴露
*/
public class Demo11 {
public static void main(String[] args) {
Xoo xoo = new Xoo();
xoo.start();
}
}
class Xoo{
Timer timer = new Timer();
public void start(){
timer.schedule(new MyTask(), 0,1000);
timer.schedule(new StopTask(), 1000*10);//在10秒以后执行一次
}
private class StopTask extends TimerTask{
public void run(){timer.cancel();}//取消timer上的任务
}
private class MyTask extends TimerTask{
int i = 10;
public void run(){
System.out.println(i--);
}
}
}
package day04;
/*
* 匿名内部类==匿名类
* new Uoo(){}就是匿名内部类!是继承于Uoo类的子类,并且
* 同时创建了子类型实例,其中{}是子类的类体
* {}是类体,可以写任何类中的成员
*/
public class Demo12 {
public static void main(String[] args) {
Uoo u = new Uoo();//创建Uoo实例
Uoo u1 = new Uoo(){};//创建匿名内部类实例
Uoo u2 = new Uoo(){
public void test(){//方法的重写
System.out.println("u2.test()");
}
};
u2.test();//调用在匿名内部类中重写的方法。
// new Doo();编译错误,不能创建接口实例
Doo doo = new Doo(){//实现接口,创建匿名内部类实例
public void test(){//实现接口中声明的抽象方法
System.out.println("实现test");
}
};
doo.test();//调用方法
}
interface Doo{
void test();
}
}
class Uoo{
public void test(){}
}
package day04;
import java.util.Timer;
import java.util.TimerTask;
public class Demo13 {
public static void main(String[] args) {
final Timer timer = new Timer();
//使用匿名内部类实现TimerTask
TimerTask task = new TimerTask(){
public void run(){
System.out.println("HI");
}
};
timer.schedule(task, 0,1000);
timer.schedule(new TimerTask(){
public void run(){
timer.cancel();//在匿名内部类中只能访问final局部变量,jdk1.8变了?
}
}, 1000*10);
}
}