1.匿名内部类:其实就是内部类的简化形式,它所体现的就是一个类或者接口的子类对象。
前提:
     内部类必须继承或实现外部类或接口。

格式:
    new 父类&接口(){};
    其实就是一个子类对象,用{};结束

匿名内部类在程序中的体现形式有三种:
 1.父类为普通的类

  1. class Inter{
  2.  
  3. }
  4.  
  5. class OuterTest{
  6.  
  7. public static void function(){
  8.  
  9. new Inter(){
  10.  
  11. private int num = 9;
  12. void show(){
  13. System.out.println("这是Inter子类的成员变量num="+num);
  14. }
  15. }.show();
  16. /*
  17. 若改以上代码为:编译时就会报错了,因为编译时检查左边类型Inter类中并没有show()方法
  18. Inter in = new Inter(){};
  19. in.show();
  20. */
  21. }
  22. }
  23.  
  24. class MyOuterDemo
  25. {
  26. public static void main(String[] args)
  27. {
  28. OuterTest.function();
  29. }
  30. }

2.父类为抽象类(子类中一定要覆盖抽象方法)

  1. 2.父类为抽象类(子类中一定要覆盖抽象方法)
  2. abstract class Test{
  3.  
  4. abstract void show();
  5. }
  6.  
  7. class Outer{
  8. int x = 8;
  9.  
  10. /* 这是匿名内部类的完整形式
  11. class Inter extends Test{
  12.  
  13. void show(){
  14. System.out.println(x);
  15. }
  16. }
  17. */
  18.  
  19. public void method(){
  20.  
  21. //new Inter().show();
  22.  
  23. Test t = new Test(){
  24.  
  25. void show(){
  26. System.out.println("x="+x);
  27. System.out.println("这是覆盖Test抽象类中的方法,因为子类继承它就必须覆盖");
  28. }
  29.  
  30. void show1(){
  31. System.out.println("这是Test子类自己的方法");
  32. }
  33.  
  34. };
  35. t.show();
  36. //t.show1();运行这个里会报错,因为Test抽象类中并没有show1()方法
  37.  
  38. }
  39. }
  40.  
  41. class OuterInterDemo
  42. {
  43. public static void main(String[] args)
  44. {
  45. new Outer().method();
  46.  
  47. }
  48. }

3.父类为接口interface

  1. interface Inter{
  2. void show();
  3. }
  4.  
  5. class Outer{
  6.  
  7. static Inter method(){
  8.  
  9. return new Inter(){
  10.  
  11. public void show(){
  12. System.out.println("show run");
  13. }
  14. };
  15.  
  16. }
  17. }
  18.  
  19. class OuterTest1
  20. {
  21. public static void main(String[] args)
  22. {
  23. Outer.method().show();
  24. /*
  25. 上面一句,相当于:
  26. Inter in = Outer。method();
  27. in.show();
  28. */
  29. }
  30. }

什么时候使用匿名内部类?
   当函数的参数是一个接口类型时,该接口中的方法不超过3个的时候(因为方法过多时,产生匿名内部类的方法就变得太臃肿了),为了简化代码,将匿名内部类作为参数进行传递。

java学习笔记day06---匿名内部类的更多相关文章

  1. 2)Java学习笔记:匿名内部类

    为什么要使用匿名内部类 ①如果以前的类有一些缺陷,只是想在某一个模块进行修复,可以在引用该类的地方使用匿名内部类,在overRide方法进行修复. ②如果一个类,需要派生出很多类,而且这些类大多只是在 ...

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

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

  3. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  4. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  5. java学习笔记9--内部类总结

    java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...

  6. Java学习笔记之---内部类

    Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...

  7. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  8. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  9. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  10. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

随机推荐

  1. [Immutable.js] Differences between the Immutable.js Map() and List()

    The Immutable.js Map() is analogous to a Javascript Object or Hash since it is comprised of key-valu ...

  2. PHP获取中英文混合字符串长度及截取

    1.字符串长度 PHP获取中英文混合字符串长度的实现代码如下,1中文=1位,2英文=1位,可自行修改 /** * PHP获取字符串中英文混合长度 * @param $str string 字符串 *  ...

  3. flashback database操作步骤

    默认情况数据库的flashback database是关闭的. 启用Flashback Database 步骤:1.配置Flash Recovery Area 检查是否启动了flash recover ...

  4. OC对象:封装、继承、多态的使用举例一

    // 该代码在网上找的视频中的例子,感觉很适合类和对象分不清楚的同学参考,仅供学习分享,谢谢 // 创建一个Pointtest类,用属性x.y表示点的坐标位置,求两点之间的距离,使用两种方法:类方法和 ...

  5. TexturePacker文件的反向解析-TextureUnpacker

    最近在使用cocos2d-x做开发,其中会用到TexturePacker工具打包纹理文件,但是有时候想从打包好的.plist和.png大图文件反向生成原始的小图文件,TexturePacker好像没有 ...

  6. (转) Eclipse - Python - Installation of PyDev with a Python Hello World tutorial

    Once you finished your installation of Python on your Windows OS,  GNU/Linux or Mac OS, let me tell ...

  7. CDZSC_2015寒假新人(2)——数学 A

    A - A Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  8. vs2010中socket链接错误LINK2019

    解决方法参考下面链接: http://blog.163.com/strive_only/blog/static/893801682009225112354746/

  9. MAC下用OPENSSL生成公钥和私钥

    MAC OS自带了OpenSSL,所以不用去编译那一坨跟SHIT一样的源码.直接在命令行里使用OPENSSL就可以. 打开命令行工具,然后输入 openssl打开openssl,接着只要三句命令就可以 ...

  10. postgresql配置的一些问题

    ubuntu通过软件中心安装后,配置文件位于如下目录 我用超级用户创建了其它数据库用户,发现是登录不了的,必须还得创建同名的linux用户,甚是麻烦.在配置文件pg_hba.conf中发现了问题. 其 ...