您当前的位置: 首页 >  Java

星夜孤帆

暂无认证

  • 2浏览

    0关注

    626博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java学习笔记(21)-内部类与匿名类

星夜孤帆 发布时间:2018-05-22 10:14:49 ,浏览量:2

内部类

    定义在类内部的类。

    用于在外部类中封装类的定义。

    内部类可以共享外部类的属性和方法。

    如:定时器任务的实现,经常采用内部类实现。

匿名内部类也称为匿名类

    语法非常简洁: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);
	}
}
关注
打赏
1636984416
查看更多评论
立即登录/注册

微信扫码登录

0.0501s