匿名内部类的示例介绍

1.方法中的内部类

public class InnerClass {

public void LocalOne() {

class DeepInside {

DeepInside() {

System.out.println("方法中的内部类");

}

}

new DeepInside();

}

// new DeepInside();外部无法调用

public static void main(String[] args) {

InnerClass A = new InnerClass();

A.LocalOne();

}

}

2.匿名内部类

public class InnerClass {

public static void main(String[] args) {

// 匿名内部类

new InnerCall("hello") {

public void shuChu() {

System.out.println(" baby!");

}

}.shuChu();

// 输出:hello baby!

}

}

class InnerCall {

private String name;

InnerCall(String s) {

name = s;

System.out.print(name);

}

}

3.类中内部类,有名字的

interface Contents {

int value();

}

public class InnerClass {

// 内部类,有名字的

class MyContents implements Contents {

public int value() {

return 0;

}

}

public Contents getContents() {

return new MyContents();

}

public static void main(String[] args) {

InnerClass p = new InnerClass();

Contents c = p.getContents();

System.out.println(c.value());

}

}

4.该例是例3个匿名内部内写法

interface Contents {

int value();

}

public class InnerClass {

public Contents getContents() {

return new Contents() {// 这段大括号中代码就是匿名内部类

public int value() {

return 0;

}

};

}

public static void main(String[] args) {

InnerClass p = new InnerClass();

Contents c = p.getContents();

System.out.println(c.value());

}

}

注:例2的用法很常见,官方说明如下:

简单的解释说明:

In general, the syntax is

new SuperType(construction parameters)

{

inner class methods and data

}

Here, SuperType can be an interface, such as ActionListener; then, the inner class implements

that interface. Or SuperType can be a class; then, the inner class extends that class.An anonymous

inner class cannot have constructors because the name of a constructor must be the same as the name

of a class, and the class has no name. Instead, the construction parameters are given to the superclass

constructor. In particular, whenever an inner class implements an interface, it cannot have any

construction parameters. Nevertheless,you must supply a set of parentheses as in

new InterfaceType()

{

methods and data

}

存在它的原因是:

1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。即内部类实例对包含它的哪个类的实例来说,是特权的。

2.对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如何,那怕是public,除了包容类,其他类都无法使用它。

3.匿名内部类可以很方便的定义回调。

4.使用内部类可以非常方便的编写事件驱动程序。

其实它真正的目的仅仅为了定义回调--进一步就是事件驱动。

在使用匿名内部类时,要记住以下几个原则:

·匿名内部类不能有构造方法。

·匿名内部类不能定义任何静态成员、方法和类。

·匿名内部类不能是public,protected,private,static。

·只能创建匿名内部类的一个实例。

·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

·内部类只能访问外部类的静态变量或静态方法。

匿名类和内部类中的中的this :

有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名

java 匿名内部类_Java 匿名内部类的示例介绍相关推荐

  1. python内嵌函数和闭包与java 匿名内部类_Java匿名内部类构造原理分析

    很明显,我们的匿名内部类有了名字 InnerTest$1,而且是继承自 Test class InnerTest$1 extends Test 这个类中有一个成员final InnerTest thi ...

  2. java标识符_Java标识符的简单介绍

    各位小伙伴大家好,这次小编要介绍一下Java的标识符,那么,问题来了,什么是标识符呢?下面,小编来给大家解答吧,java标识符就是在java程序中给变量,类,方法等命名的符号.(关于类和方法一时半会说 ...

  3. java给定_Java – 在给定示例中使用super()

    我刚刚开始学习Spring框架,并在javatpoint.com上找到了一些教程. 我有这个代码(没什么特别的,只打印一些问题和答案): private int id; private String ...

  4. java 麦克风_JAVA麦克风录音示例源码

    [实例简介] 利用JAVA实现麦克风录音功能,支持常见的音频格式.当用户点击捕捉按钮,输入 从麦克风捕获数据,并保存在 经指定的命名junk.xx音频文件文件格式. (xx为文件扩展名 指定的文件格式 ...

  5. java中带参数匿名内部类_Java内部类之匿名内部类

    我们都知道Java中可以使用内部类,将一个类的定义放在另一个类的定义的内部,这就是内部类,但是匿名内部类往往使我们摸不着头脑,因为它并没有特定的名称,那么该如何使用它呢? 定义一个匿名内部类 publ ...

  6. java中带参数匿名内部类_Java中的匿名内部类

    一.匿名内部类 之前的所有类都有自己的名字,但是有时候如果某个接口的实现类(或者某个父类的子类)只需要使用一次,此时这样的类如果我们单独定义出来则需要单独为其创建一个"*.java" ...

  7. java组合与继承始示例_Java 9功能与示例

    java组合与继承始示例 Java 9 is a major release and it has brought us a lot of features for developers. In th ...

  8. Java内部类(匿名内部类)

    Java内部类(匿名内部类) 一.内部类 二.静态内部类 三.成员内部类 四.局部内部类(了解即可) 五.匿名内部类(重要) 一.内部类 1.概述 内部类就是一个定义在一个类里面的类,里面的类可以理解 ...

  9. Java 匿名类(匿名内部类)

    Java 匿名类(匿名内部类) 学习的参考博文:无恨之都 1. 初识 匿名类 标准说法: 内部类包括:成员类.局部类.匿名类(匿名内部类). 匿名类概念: 匿名类可以使你的代码更加简洁 (JDK8之后 ...

最新文章

  1. 解密!谷歌这样搞定美军世纪难题,从眼科诊断到无人驾驶
  2. 购物中心定位分析、调整方案及租金建议
  3. 开发办公APP时间估算
  4. 一个略显复杂的transformation算子_distinct
  5. wps怎么转成pdf?只需六步的转换方法
  6. 全景摄像技术大有可为
  7. python中队列的应用用场景_消息队列应用场景
  8. RNN隐藏层的两种计算方法GRU和LSTM
  9. mysql数据库中文乱码解决
  10. 使用NuGet安装EntityFramework4.2
  11. layui admin 当前子页面 刷新 其他页面 layui 关闭 子弹窗
  12. 重装win 修复ubuntu引导
  13. PMP®|项目经理如何应对项目需求变更?
  14. 用Js怒刷LeetCode
  15. iOS----------关于UDID和UUID的一些理解
  16. 计算机中存储器的最小单位是什么意思,计算机内存储器的最小存储单位是什么...
  17. TS高级类型 Record、Pick、Partial、Required、Readonly、Exclude、Extract、Omit、NonNullable 使用
  18. Android字体加粗的几种样式
  19. web表格CSS 属性
  20. 嵌入式开发:硬件在环测试

热门文章

  1. 3、大话设计模式--浅谈基础
  2. TI Sitara AM57x 多核SoC核心板(DSP + ARM)-性能及参数资料
  3. PID算法(二)衍生PID
  4. 沉浸状态栏下输入框如何被软键盘顶起
  5. js生成随机十六进制颜色
  6. 3个迹象表明,企业是时候搭建CDP了!
  7. word07打开文档速度非常慢,无响应,关闭时也无响应的解决方案
  8. oracle 数据库去重查询
  9. 对C++程序内存管理的精雕细琢
  10. 多因子选股模型python_多因子选股模型构建初尝试(更新中)