浅谈接口、抽象类不能实例化与匿名内部类是否互相矛盾

这是我学习java过程中遇到的一个概念问题,要讨论这个问题,首先我们应明白抽象类和接口肯定不能实例化;那么匿名内部类又是什么意思呢?且看下面代码。

public class TestHome {
	public static void main(String[] args) {
		//定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量
		Home h=new Home(){
			@Override
			public void playGames() {
				System.out.println("I don't like playing games");
			}
			public void eat(){
				System.out.println("I'm having lunch");
			}
		};
		h.playGames();
		//错误,不能调用eat方法
		h.eat();
	}
}
interface Home{
	public void playGames();
}
//Aaa做上型转换就相当于一个Home类型的匿名内部类
class Aaa implements Home{
		@Override
		public void playGames() {
			System.out.println("I don't like playing games");
		}
		public void eat(){
			System.out.println("I'm having lunch");
		}
}

我的理解是:创建一个对象的匿名内部类相当于创建了一个这个对象的子类,只是这个子类没有名字,我们要用特殊的写法来实现它。

匿名内部类只能调用重写方法,如果匿名对象里有成员变量,引用变量h还可以调用成员变量。但其不能调用自己的特有方法,这和上转型的作用是相同的。

接口、抽象类不能实例化与匿名内部类是不矛盾的,因为匿名内部类的实质是创建了一个没有名字的子类。相当于创建了一个新的类,并不是实例化接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值