Java中匿名内部类

含义:

由于Java中接口和抽象类都不能实例化对象,故使用接口或抽象类时,必须有一个实现类(对应接口)或继承类(对应抽象类)。而该实现类或继承类的对象被使用次数很少,不值得去专门编码时候,就可以使用匿名内部类,此时该类不必命名,并且对象只被创建一次。即匿名内部类的实质是:一个重写或实现了父类或接口的子类对象。

格式:

new 抽象类/接口(){
    匿名内部类类体部分;
}

用法:

(1)接口或抽象类的使用,省略掉特意书写一个类去实现这个接口或抽象类的方法,直接在实例化的时候就写好这个方法。

接口使用匿名内部类:

//定义Animal接口,包含抽象方法jump()
public interface Animal {
	public abstract void jump();
}



public static void main(String [] args){
		Animal a = new Animal(){
			public void jump() {
				System.out.println("测试--接口用匿名内部类");
			}
		};
	}

上述代码中,首先定义了接口Animal,在使用接口时,省略了单独书写接口的实现类,直接在实例化该实现类的时候,重写接口中的抽象方法,并且该实现类没有名称,为匿名内部类。

抽象类使用匿名内部类:

//定义Animal抽象类,包含抽象方法jump()
public abstract class Animal {
	public abstract void jump();
}

public static void main(String [] args){
		Animal a = new Animal(){
			public void jump() {
				System.out.println("测试--接口用匿名内部类");
			}
		};
	}

上述代码中,首先定义了抽象类Animal,在使用抽象类时,省略了单独书写抽象类的继承类,直接在实例化该继承类的时候,重写抽象类中的抽象方法,并且该继承类没有名称,为匿名内部类。

(2)当接口或抽象类类型的引用数据类型作为参数在方法中,可以直接使用匿名内部类的方式创建相应的对象。

//定义接口Shout,包含两个抽象方法shout1()和shout2()
interface Shout{
	void shout1();
	void shout2();
}


//测试类中定义静态方法test(),其中方法的参数类型是接口类型
public static void test(Shout a){
	a.shout1();
	a.shout2();
}


//在主函数中调用静态方法test()
public static void main(String [] args){
	test(new Shout(){
		public void shout1() {
			System.out.println("测试--shout1");
		}
		public void shout2() {
			System.out.println("测试--shout2");
		}
	});
}

上述代码中,首先定义了接口Shout,并且包含两个抽象方法。在测试类中定义一个静态方法,该静态方法的参数是接口类型的引用数据类型。在主函数中,调用该静态方法,方法的参数必须是该接口的实现类的对象,此处省略掉书写该接口的实现类,使用匿名内部类,直接new一个接口的匿名内部类对象。

总结:

匿名内部类的本质是抽象类或接口的继承类或实现类,即匿名内部类必须继承一个抽象类或实现一个接口,并且只能继承一个抽象类或实现一个抽象类。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值