随笔之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匿名内部类的更多相关文章

  1. 从一开始,说出事java匿名内部类

    java内部类.匿名类原本以为它们的使用已经很滑, 成绩, 就在昨天晚上12指向时钟发生重大事故.事故的严重程度再说吧,那是因为我没有睡一晚睡眠. 那以下先用一段模拟代码来描写叙述下我出现的问题的: ...

  2. (转)java匿名内部类详解

    原文:http://android.blog.51cto.com/268543/384844/   内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的 ...

  3. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  4. 【50】java 匿名内部类剖析

    匿名内部类介绍: 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 匿名内部类的声明 ...

  5. JAVA匿名内部类(Anonymous Classes)

    1.前言 匿名内部类在我们JAVA程序员的日常工作中经常要用到,但是很多时候也只是照本宣科地用,虽然也在用,但往往忽略了以下几点:为什么能这么用?匿名内部类的语法是怎样的?有哪些限制?因此,最近,我在 ...

  6. Java匿名内部类访问外部

    匿名内部类访问外部局部变量必须是final修饰的,Java 1.8 会默认为其加上final 例子如下: public void send(String topicName, T obj) { Str ...

  7. 为什么Java匿名内部类访问的外部局部变量或参数需要被final修饰

    大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类. class Outer { priv ...

  8. Java 匿名内部类 & 内部类

    一.JAVA中内部类和匿名内部类的区别 内部类:内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用. ...

  9. java匿名内部类使用场景列举

    示例一: package com;      interface Operation {       double operateTwoIntNum(int a, int b);   }      p ...

随机推荐

  1. Effective java笔记3--类和接口1

    一.使类和成员的可访问能力最小化 要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他的实现细节.一个设计良好的模块会隐藏所有的实 ...

  2. 查询mysql 哪些表正在被锁状态

    查询mysql 哪些表正在被锁状态 show OPEN TABLES where In_use > 0; 参考链接:http://zhidao.baidu.com/link?url=tCQ70t ...

  3. 第2章 深入分析java I/O的工作机制(下)

    2.6 设计模式解析之适配器模式 2.6.1 适配器模式的结构 把一个类的接口变换成一客户端能接受的另一个接口. Target(目标接口): 要转换的期待的接口. Adaptee(源角色):需要适配的 ...

  4. python学习(三) 使用字符串

                                                                                               第三章 使用字符串 ...

  5. 使用模板创建第一个Web API项目

    软件环境 vs 2015 update3 本节将通过例子讲述创建Web API 项目的方法 第一步,打开vs ,依次通过[文件]菜单,[新建][项目]命令,大致步骤如下图 :   第2步,在弹出对话框 ...

  6. List去重与排序

    最简单的方法:利用Where一句话去重 pointLst = pointLst.Where((x, i) => pointLst.FindIndex(z => z.POINT_ID == ...

  7. centos7 xfs 文件系统配置quota 用户磁盘配额

    centos7的xfs配置   XFS是扩展性高.高性能的文件系统.也是rhel7/centos7的默认文件系统.XFS支持metadata journaling,这使其能从crash中更快速的恢复. ...

  8. HTML篇

    要内容 web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 HTML规范 HTML结构详解 一.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) ...

  9. Python数据分析 EPD

    参考用书 <利用Python进行技术分析:Python for Data Analysis> 官方把epd (https://www.enthought.com/products/cano ...

  10. JAVA爬取亚马逊的商品信息

    在程序里面输入你想爬取的商品名字,就可以返回这件商品在亚马逊搜索中都所有相关商品的信息,包括名字和价格. 解决了在爬取亚马逊时候,亚马逊可以识别出你的爬虫,并返回503,造成只能爬取几个页面的问题. ...