在学习java的继承的过程中遇到这样的一个分析类题目,比较有意思,在这里做出简要分析:

//请写出以下程序运行结果:package test;
public class Test {public static void main(String[] args) {Test t = new Test();t.show(new Car(){public void run(){System.out.println("test run");           }});}public void show(Car c){c.run();c.show();
}}
abstract class Car{public void run(){System.out.println("car run");     }public void show(){System.out.println(getClass().getName());
}}

那么,我们可以通过断点的分析:

  1. 首先。我们从main函数进入,发现他创建了Test类的一个对象t;

    我们在test类中并没有寻找到Test类的构造函数,所以应该是系统默认的构造器,不进行任何的行为;

  2. 之后,我们注意一下这一步,首先是t.show()方法,在Test的类中有这么一个方法,不过我们看到show方法是需要传入一个car类的对象,所以他new了一个car对象,离奇的是car对象后面接着一对大括号。

  3. 注意到:这里有一个匿名类,用来一次性使用的创建car对象。这样抽象类car才能被以匿名类中的内容实例化。这样,我们就完成了对car类的实例化,得到了一个car类的对象。

  1. 接着,我们以那个新new的对象作为参数,调用了Test类中的show方法。

而show方法的第一条语句是c.show();注意到我们是通过匿名类创建的对象,而我们是通过匿名类中的重新写的run()方法,所以他又跳回了第六行,输出“test run”;

  1. 好的,接下来我们又回到了show方法中,继续调用c.show(),这时,我们回头看匿名类,它里面竟然没有show的方法。。。所以他就只能调用car类的show()方法。

  2. 注意到了右侧返回的getName()是"test.Test$1",好吧,test是包名,Test是类名,可以理解!

    但是$1就使得不少同学迷惑了。

  3. 好的,我们这次打开文件管理系统,找到我们编译的文件所在,发现.java编译后多出了Test$1.class的文件,这个.class是怎么来的呢?对了是匿名类!这里的Test$1这个类名是编译器给它的名字(匿名类没有名字,但是java编译器要给他起个名,才好分辨)而命名的格式就是第一个Test类下面的匿名类的话就叫$1,第二个就是$2。

这样就可以了,程序就结束了!主要涉及了匿名成员类。大家有兴趣(最好可以了解一下)

java中匿名类例题的简要分析相关推荐

  1. Java中匿名类的两种实现方式

    使用匿名内部类课使代码更加简洁.紧凑,模块化程度更高.内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到.然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式 ...

  2. java中匿名类的注意细节

    abstract class Outer{int num;public Outer(int x){num = x;}public abstract void show1();public abstra ...

  3. 在java中下列描述错误的是_在 JAVA 中 , 关于类的方法 , 下列描述错误的是 ()._学小易找答案...

    [多选题]价值的特性是 [简答题]输入任一字符串,统计其中数字,字母及其它字符个数 .(25分) [填空题]1.产品整体包括哪五个基本层次 2核心层次产品最基本的层次,是产品的_____ [单选题]纸 ...

  4. java中的类和对象(重点)超详细

    java中的类和对象 1.类与对象的初步认知 2.类和对象的实例化 3.类的成员 3.1.字段,属性,成员变量 3.2.方法 3.3.static 关键字 3.4.小结 4.封装 4.1.privat ...

  5. java 接口不是不能new吗?- java:使用匿名类直接new接口

    java 接口不是不能new吗? 这叫匿名内部类,你后面的大括号实际上就是一个Runnable的实现类了 只不过这个类名和接口名称一样,所以是匿名的,别人地方也用不了 这种写法相当于先创建了一个匿名类 ...

  6. Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释

    Java中String类的concat方法 在了解concat()之前,首先需要明确的是String的两点特殊性. 长度不可变 值不可变 这两点从源码中对String的声明可以体现: private ...

  7. Java中equals()方法和==的区别分析

    Java中equals方法和==的区别分析 equals(Object obj)方法,将对象与传入的obj进行比较,相等返回true,否则返回false.equals方法和"==" ...

  8. java udp类_UDP及java中的类

    UDP及java中的类 类DatagramSocket DatagramPacket 1.客户端: (1) 创建客户端 DatagramSocket类 (2)准备数据 字节数组 (3)打包 Datag ...

  9. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

最新文章

  1. Log4j每天、每小时、每分钟定时生成日志文件
  2. sharepoint的入门知识
  3. 阿里内推题——物流派送员送快递最短路径问题
  4. java 和c 比优势_Java和C++各有什么优势。
  5. Windows 手动触发 BSOD
  6. 特征选择的工程方法?
  7. 夸奖对方代码写的好_我写出这样干净的代码,老板直夸我
  8. 关注C-RAN 的五大理由
  9. OA项目之Mybatis多表链接查询
  10. 因為 because、since 、as、for、because of、owing to、due to
  11. 【Unity2D】Sprite 或图片格式常用设置
  12. 计算机突然无法连接网络,win7电脑突然不能上网的四种解决方案
  13. 深度学习在图像分类中的发展
  14. 微信开发:申请测试公众号
  15. 计算机辅助数控编程交互图形,第8章-计算机辅助数控编程.ppt
  16. MYSQL UNION 同列类型不同时的处理方法
  17. pycharm 格式化html文件
  18. 七、MySQL之数据定义语言(二)
  19. Paul Zindel【保罗·金代尔】
  20. Xamarin.android 重写axml控件

热门文章

  1. Google闯进手机搜索 引发蝴蝶效应
  2. 后台table内容表格溢出隐藏文字
  3. Linux下pager-taglib分页中文搜索乱码
  4. C语言C++ 依路径创建目录或文件
  5. 你越努力,运气就会越好!
  6. 保存的视频如何去掉水印
  7. int 3中断与软件调试
  8. android无线打印设置纸张和朝向
  9. 安装完Office(2016专业加强版)后,再安装Visio(2016专业版),右键新建没有Visio选项
  10. TASSEL的MLM模型构建的kinship矩阵相关知识