#随笔之java匿名内部类
随笔之java匿名内部类
从今天起开始每日一篇技术博客,当然这只是我当天所学的一些随笔,里面或多或少会有理解不当的地方,希望大家多多指教,一起进步!
在讲匿名内部类之前,先讲讲内部类的一些概念。
1.内部类:顾名思义,内部类就是写在一个类里面的类(废话),这里大家可能会问了,为什么我们不直接写一个class呢,非要写在内部。原因很简单,内部类一方面是有很好的封装性,要通过外部类对象才能访问(具体实例见下方代码)。另一方便定义起来很方便。最后,内部类还可以骚气地实现多重继承,因为外部类是否继承或实现一个抽象类或接口对内部类毫无影响,内部类依然可以去继承,这样是一种变相的多继承。接下来我们看一下内部类的一个实例
/**
@author lw
*/
public class InnerClassTest {
class InnerClass
{
//public InnerClass(){}
public void B()
{
System.out.println("这是内部类方法");
}
}
public static void main(String args[])
{
InnerClassTest i=new InnerClassTest();
i.new InnerClass().B();
}
}
从这个程序可以看到,我们在实例化内部类时,需要借助外部类的对象,否则会报错。但如果类改为static,就可以直接调用。
内部类除了可以直接定义在类中,还可以定义在类的方法中,但需注意的是该类只能在本方法中实例化。
好了,讲了那么多废话,开始进入正题,匿名内部类!有没有很开心??==
首先还是从概念说起,匿名内部类的两个特征,一是匿名,而是内部类(哈哈哈又是废话)。
我们通过一个实际的例子来理解这个东西。
TestInterface接口
/**
* @author lw * */
public interface TestInterface {
public void print();
}
InnerClassTest.class(和内部类名字一样,偷了个懒)
`
/**
* @author lw
*/
public class InnerClassTest {
public static void main(String args[])
{
TestInterface test=new TestInterface()//new一个接口很奇怪。。。
{
public void print()
{
System.out.println("匿名内部类");
}
};
test.print();
}
}
这里我们可以看到,匿名内部类的好处主要在于简化代码,用专业一点的话来说就是写得比较优雅,如果不用匿名内部类的话我们要实现该接口需要新建一个class,然后实现,但可以想象,如果这个类我们只用一次呢?这样的新建class是不是完全没有必要,用匿名类的方法就可以直接简洁地实现了。我们需要注意的是匿名内部类一定要对应一个父类或者接口,然后在里面实现其需要的方法,额虽然在写的时候new一个接口很奇怪。。。同时我们要明确的是匿名内部类只能用一次,不能在外部复用,所以对于多次使用的类不能用该方法。以上都是个人理解,如有不对望指正~晚安!
#随笔之java匿名内部类的更多相关文章
- 从一开始,说出事java匿名内部类
java内部类.匿名类原本以为它们的使用已经很滑, 成绩, 就在昨天晚上12指向时钟发生重大事故.事故的严重程度再说吧,那是因为我没有睡一晚睡眠. 那以下先用一段模拟代码来描写叙述下我出现的问题的: ...
- (转)java匿名内部类详解
原文:http://android.blog.51cto.com/268543/384844/ 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的 ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- 【50】java 匿名内部类剖析
匿名内部类介绍: 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 匿名内部类的声明 ...
- JAVA匿名内部类(Anonymous Classes)
1.前言 匿名内部类在我们JAVA程序员的日常工作中经常要用到,但是很多时候也只是照本宣科地用,虽然也在用,但往往忽略了以下几点:为什么能这么用?匿名内部类的语法是怎样的?有哪些限制?因此,最近,我在 ...
- Java匿名内部类访问外部
匿名内部类访问外部局部变量必须是final修饰的,Java 1.8 会默认为其加上final 例子如下: public void send(String topicName, T obj) { Str ...
- 为什么Java匿名内部类访问的外部局部变量或参数需要被final修饰
大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类. class Outer { priv ...
- Java 匿名内部类 & 内部类
一.JAVA中内部类和匿名内部类的区别 内部类:内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用. ...
- java匿名内部类使用场景列举
示例一: package com; interface Operation { double operateTwoIntNum(int a, int b); } p ...
随机推荐
- apache 2 修改虚拟目录
准备好环境,就要开始进行开发了.这一篇,我们在Ubuntu Apache上配置虚拟目录. 知识准备: 区别于Windows 下apache,配置文件通常只有一个,就是httpd.conf. Linux ...
- 【转】在Linux下使用Jmeter执行测试任务
想在Linux下运行jmeter必须先安装jdk,安装步骤如下: (1).下载一个linux可用的jdk包(比如:jdk-6u45-linux-i586.bin), (2).然后将jdk-6u45-l ...
- 求小球反弹高度,及落地过程中经过的路程~~~java代码
总结:这种思想,不是一想就突然出现在脑海里的 package com.c2; //题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半: //再落下,求它在 第10次落地时,共经过多少米?第 ...
- AngularJS:Service
ylbtech-AngularJS:Service 1.返回顶部 1. AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务. 什么是服务? 在 An ...
- Error EBUSY: osd.0 is still up; must be down before removal的解决办法
标签(空格分隔):ceph,ceph运维,osd故障 集群环境: [root@node3 ~]# cat /etc/redhat-release CentOS Linux release 7.3.16 ...
- 1046 Shortest Distance
题意:给出一个环和结点之间的距离,求任意两结点之间的最近距离.如图: 思路:令数组dis[i]表示1号结点逆时针至i号结点的距离,初始化dis[1]=0,其他值在输入是确定,即 dis[i] 0 1 ...
- MyBatis多表映射demo
三个实体类,作者.文章和评论. public class Author { private int id; private String username; private String nickna ...
- springboot成神之——spring文件下载功能
本文介绍spring文件下载功能 目录结构 DemoApplication WebConfig TestController MediaTypeUtils 前端测试 本文介绍spring文件下载功能 ...
- 免Oracle客户端程序监听程序配置
Oracle默认安装时,监听程序和tnsnames程序中的监听方式都是默认的localhost,但免客户端的程序是连接不上的.这时需要: 1.将listener中的(HOST = localhost) ...
- Delphi.NET
Delphi.NET Borland.VclDSnap.dll Borland.Vcl.TCustomClientDataSet TFieldType.ftBCD Borland.Vcl.TField ...