`
ayis
  • 浏览: 186246 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java中匿名内部类的两种实现方式

    博客分类:
  • java
阅读更多

   使用匿名内部类课使代码更加简洁、紧凑,模块化程度更高。内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到。然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式:第一种,继承一个类,重写其方法;第二种,实现一个接口(可以是多个),实现其方法。下面通过代码来说明:

 

public class TestAnonymousInterClass{
	public static void main(String args[]){
		TestAnonymousInterClass test=new TestAnonymousInterClass();
		test.show();
	}
	//在这个方法中构造了一个匿名内部类
	private void show(){
		Out anonyInter=new Out(){// 获取匿名内部类实例
			
			void show(){//重写父类的方法
				System.out.println("this is Anonymous InterClass showing.");
			}
		};
		anonyInter.show();// 调用其方法
	}
} 

// 这是一个已经存在的类,匿名内部类通过重写其方法,将会获得另外的实现
class Out{
	void show(){
		System.out.println("this is Out showing.");
	}
}

 

程序运行的输出结果为:

 

this is Anonymous InterClass showing.

 

   所以在这里看出,匿名内部类有了自己的实现。其实很简单,使用匿名内部类是因为我这地方需要有点什么特殊的实现,所以我就在这地方把具体实现也给了出来了。然后我就在这地方获取它的实例,调用它的方法。

   接口的方式,只要把父类换成接口就行了,没必要给出代码了。

 

   使用匿名内部类时我们不要忘了我们的目的,我们只是在这地方想对某个类有特殊的实现。而不要想得太多,在匿名内部编写其它的方法。在匿名内部类中编写的自己的方法是不可见的。此种做法是毫无意义的,当然一般也不会这么做。在这里只是告诉初学者对于匿名内部类不要想的太多,而要这么想:匿名内部类就是重写父类或接口的方法。

 

 匿名内部类是没有名字的,所以我们没办法获得其类型,而只能把它当作超类或接口类型来使用。

 

当然,我这篇文章不是很有深度。欢迎发表意见!

6
14
分享到:
评论
16 楼 weed_hz 2013-04-20  
abstract class out(){
       void show(){
       System.out.printl("hello world");
       }
}
15 楼 allenny 2013-01-27  
都取名叫anonyInter了,何来匿名呢?
14 楼 Jcson 2012-08-19  
我怎么感觉你们理解
Out anonyInter=new Out()
这句理解错了,
anonyInter
并不是内部类的名称,是匿名的,
13 楼 toliuxuan 2012-08-04  
monokurobo 写道
首先你对匿名内部类的理解是错的

1.匿名内部类是没有名字的:Out anonyInter=new Out()你在这里已经定义了这个内部类的名字是anonyIntent。
2.可以肯定的是你对匿名内部类的作用的理解,就是可以继承类或者实现接口


亲,anonyIntent这只是一个引用变量而已吧,重么是内部类的名字呢。。
12 楼 monokurobo 2012-02-02  
首先你对匿名内部类的理解是错的

1.匿名内部类是没有名字的:Out anonyInter=new Out()你在这里已经定义了这个内部类的名字是anonyIntent。
2.可以肯定的是你对匿名内部类的作用的理解,就是可以继承类或者实现接口

11 楼 JMS_Exception 2011-11-24  
误人子弟。。。 :wink: 
10 楼 lwy8802 2011-10-17  
在匿名内部类中编写的自己的方法是不可见的。此种做法是毫无意义的````

不要误人子弟```谢谢```
9 楼 zhaoyu_h 2011-09-09  
很好的啊。。。谢谢啦。。。
8 楼 wwjjkk 2011-02-24  
原先一直没搞清楚匿名内部类到底用来做什么,看了LZ写的东西,豁然开朗了
7 楼 yongboy 2010-10-23  
Out anonyInter=new Out(){// 获取匿名内部类实例

嗯,这里已经不是匿名了,呵呵~
6 楼 微雨骑驴入剑门 2010-06-11  
谢谢
学习了
5 楼 ddzero 2010-05-31  
这是匿名内部类吗?顶多算内部类
4 楼 tntxia 2009-12-03  
挺有意思的。
3 楼 heart4321 2009-09-30  
heart4321 写道
我认为你对匿名内部类的概念认识有误。

2 楼 heart4321 2009-09-30  
我认为你对匿名内部内的概念认识有误。
1 楼 mniz 2009-03-13  
兄弟,我虽然不是很懂匿名内部类,但是绝对不是你所说的,匿名内部类的语法你的先弄清楚

相关推荐

    AIC的Java课程1-6章

     通过扩展类和实现接口两种方式定义匿名内部类。 机动时间和复习 2课时 <br> 第8章 异常和断言 4课时  理解异常和错误处理的概念。  学习使用throw,throws检测抛出...

    Java经典编程源码基础例程300.zip

    实例068 匿名内部类的简单应用 104 实例069 静态内部类的简单应用 105 实例070 实例化Class类的几种方式 107 实例071 查看类的声明 108 实例072 查看类的成员 110 实例073 查看内部类信息 112 实例074 动态设置类的...

    JAVA面试题最全集

    一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? ...

    java 面试题 总结

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...

    疯狂JAVA讲义

    6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 枚举类 217 6.8.1 手动实现枚举类 217 6.8.2 枚举类入门 219 6.8.3 枚举类的属性、方法和构造器 220 6.8.4 实现接口的枚举类 223 6.8.5 包含抽象...

    java面试宝典

    44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以implements(实现)interface(接口)? 12 45、内部类可以引用他包含类的成员吗?有没有什么限制? 12 46、java 中实现多态的机制是什么...

    java基础案例与开发详解案例源码全

    2.6 Java技术两种核心运行机制29 2.7 上机练习30 第3章 3.1 变量32 3.1.1 什么是变量32 3.1.2 为什么需要变量32 3.1.3 变量的声明和赋值33 3.1.4 变量应用实例33 3.2 数据的分类34 3.2.1 Java中的八种基本数据类型34...

    java经典面试题汇总

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    JAVA笔试题集锦(1-30)基础部分

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    java面试题

    29. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 15 30. 构造器Constructor是否可被override 15 31. try {}里有一个return语句,那么紧跟在这个try...

    【05-面向对象(下)】

    •如果采用匿名内部类语法来创建函数式接口的实例,只要实现一个抽象方法即可,在这种情况下即可采用 Lambda表达式来创建对象,该表达式创建出来的对象的目标类型就是这个函数式接口。 •Lambda表达式有如下两...

    corejava培训文档

    14.2. 线程实现的两种形式 14.3. 线程的生命周期 14.4. Thread的方法 14.5. 共享数据的并发处理 14.6. 使用互斥锁的注意事项 15. 十四 标准I/O流与文件 15.1. 对文件的操作 15.2. 处理跨平台性 15.3. 对象...

    Java面试宝典-经典

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = ...

    Java面试宝典2010版

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = "Hello...

    java面试题大全(2012版)

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = "Hello...

    java基础题 很全面

    68. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 15 69. LINUX下线程,GDI类的解释。 15 70. java常用的设计模式?说明工厂模式。 15 71. 内部类可以...

    JAVA面向对象详细资料

    Java面向对象 1 1 学习方法与要求 1 2 面向对象语言与面向过程语言的区别 7 3 面向对象?...41.2 匿名内部类 70 41.3 成员内部类 71 41.4 静态内部类 72 41.5 局部内部类 73 42 作业 :商超案例,以OOP重构 73

    java学习笔记 初学者必读

    14.2. 线程实现的两种形式 14-42 14.3. 线程的生命周期 14-43 14.4. Thread的方法 14-43 14.5. 共享数据的并发处理 14-44 14.6. 使用互斥锁的注意事项 14-44 15. 十四•标准I/O流与文件 15-46 15.1. 对文件的操作 15...

Global site tag (gtag.js) - Google Analytics