阿里云【名师课堂】Java面向对象开发74:匿名内部类

阿里云【名师课堂】Java面向对象开发74:匿名内部类

引出问题

讲解匿名内部类之前。首先观察以下的一段程序:

interface IMessage {
	public void print() ;
}

class MessageImpl implements IMessage {
	public void print() {
		System.out.println("hello world") ;
	}
}

public class TestDemo {
	public static void main(String args[]) {
		IMessage msg = new MessageImpl() ;
		method(msg) ;
	}
	public static void method(IMessage temp) { // 接口引用传递
		temp.print() ;
	}
}

在这里插入图片描述
上面是个很简单的程序,但是现在有问题出现:

  • 如果说现在MessageImpl子类只使用了一次,还有必要将其定义为单独的一个类吗?
    • 很明显,这样定义是对资源的浪费。

接口使用匿名内部类

那么此时可以利用匿名内部类的概念解决这个问题。

  • class MessageImpl implements IMessage删了就是匿名内部类,但是这样写程序难以理解。

范例:在接口中使用匿名内部类

interface IMessage {
	public void print() ;
}

public class TestDemo {
	public static void main(String args[]) {
		IMessage msg = new MessageImpl() { // 定义匿名内部类
			public void print() {
				System.out.println("hello world") ;
			}
		} ;
		method(msg) ;
	}
	public static void method(IMessage temp) { // 接口引用传递
		temp.print() ;
	}
}

在这里插入图片描述

抽象类使用匿名内部类

abstract class Message {
	public void print() { // 抽象类中的普通方法调用抽象方法
		System.out.println(this.getInfo()) ;
	}
	public abstract String getInfo() ;
}

public class TestDemo {
	public static void main(String args[]) {
		// 不可以直接method(new Message()),因为抽象方法没有被覆写
		method(new Message() {
			public String getInfo() { // 覆写抽象方法
				return "hello world" ;
			}
		}) ;
	}
	public static void method(Message temp) {
		temp.print() ;
	}
}

在这里插入图片描述

普通类使用匿名内部类

class Message {
	public void print() { // 抽象类中的普通方法调用抽象方法
		System.out.println("abcdrug hijklsd") ;
	}
}

public class TestDemo {
	public static void main(String args[]) {
		method(new Message() {
			public void print() { // 子类覆写父类的print方法
				System.out.println("hello world") ;
			}
		}) ;
	}
	public static void method(Message temp) {
		temp.print() ;
	}
}

在这里插入图片描述
虽然在普通类中也可以实现,但是实际上并没有意义。

  • 经过抽象类和接口的学习我们知道,普通类尽量不要有子类去继承,能够继承的只是抽象类或接口。所以虽然可以在普通类上使用匿名内部类的形式来定义子类,但是从我们正常的开发逻辑上是错误的。

总结

匿名内部类非现阶段的重点,目前的要求是能看懂匿名内部类代码,不作为编程时的首选。
以后还会学习到匿名内部类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值