super.getClass()与this.getClass()
原文地址:http://leihuang.org/2014/11/14/getClass-method/
首先看一段代码:
import java.util.Date;
public class Test extends Date{public static void main(String[] args) {new Test().test();}public void test(){System.out.println(super.getClass().getName());}
}
上面这段代码的输出为:Test
可能你会奇怪为什么输出的是Test,而不是Date呢?我明明是调用的super.getClass()啊。我们先不急,先来了解一下getClass()方法的机制是什么。以下时getClass()在Object类中实现的源代码。
Returns the runtime classof this Object. The returned Class object is the object that is locked by static synchronized methods of the represented class. The actual result type is Class<? extends |X|> where |X| is the erasure of the static type of the expression on which getClass is called. For example, no cast is required in this code fragment: Number n = 0; Class<? extends Number> c = n.getClass(); Returns: The Class object that represents the runtime class of this object.
public final native Class<?> More ...getClass();
从上面我们能够得知两点:
- getClass()方法: 返回此 Object 的执行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
- getClass()时final方法。子类无法重写。
第一点我们能够得出:
什么是执行时类。执行时类是Object的一个实例,注意了,关键来了。他返回的不是Object.class。他返回的是执行时类,就是虚拟机中是谁在执行就是谁,假设你new Date(),Date当然是执行时类。而不是Object,否则全部类的getClass()方法都返回了Object.class 了。
依据上一段解释。Date是Object的子类,Date.getClass()返回的肯定是Date.class,
相同的Test继承Date。假如有一个属于Date的getClass()他返回的也不可能是Date.class,由于当new Test()后,Test是一个执行时类,仅仅只是他拥有Date的资源结构。所以谁被实例化,谁就是一个执行时类。
第二点我们能够得出
上面我们讨论了,Object中getClass()方法返回的是执行时类对象,谁被实例化。getClass()就得到谁。但那仅仅是Object中的getClass()方法而已,而我们时调用的Date.getClass(),or Test.getClass().
这里就涉及到getClass()方法在Object中时final方法了。因此子类是无法重写getClass方法的,所以无论是Date.getClass()还是Test.getClass()。事实上调用的都是Object中的getClass()方法。这样就保证了会遵循第一点。
假设想要从Test中得到Date.class,能够用Test.getClass().getSuperClass();
2014-11-14 12:06:54
Brave,Happy,Thanksgiving !
版权声明:本文博主原创文章。博客,未经同意不得转载。
super.getClass()与this.getClass()相关推荐
- super.getClass()与this.getClass()的问题
题外话: 最近看多线程方面的东西,看到可重入锁的时候,当中有个父类方法a加锁,子类的方法b(覆盖了a方法)也加锁.方法b又会调用a,导致会出现死锁问题,因为两个在处理的时候,都会要拿父类的对象锁.可重 ...
- java中的getclass()函数_JavaScript getClass() 函数
定义和用法 getClass() 函数可返回一个 JavaObject 的 JavaClass. 语法 getClass(javaobj) 参数 描述 javaobj 一个 JavaObject 对象 ...
- java中getClass().getResourceAsStream()与getClass().getClassLoader().getResourceAsStream()的区别
https://blog.csdn.net/J080624/article/details/53171176 转载于:https://www.cnblogs.com/quxiangxiangtiang ...
- super.getClass()方法调用返回结果的原因
http://bbs.csdn.net/topics/370010127 看到Java笔试题中有一道关于super的题,题目如下: 下面程序的输出结果是多少? import java.util.Dat ...
- java中的this.getclass和super.getClass(),以及继承的深入探究
情况一.继承.多态中的this 在继承多态中: 1.对于方法的覆盖,new的谁就调谁,这就是多态. 2.对于成员变量的覆盖,this在哪个类就指向哪个类的成员变量,没有多态. 即方法有多态性,但是成员 ...
- java getclass() 继承_【java】继承和super.getClass()
一.先看问题 question:输出的结果是什么? package cn.wxy.extendsion; /** * 父类 * @author reliveIT */ public class Fat ...
- Java中泛型 Class<T>、T与Class<?>、 Object类和Class类、 object.getClass() 和 Object.class
From:Java中泛型 Class<T>.T 与 Class<?>. Object类 和 Class类. object.getClass() 和 Object.class : ...
- getClass和getName
getClass和getName getClass getName getClass public final Class<?> getClass() 返回此 Object 的运行时类.返 ...
- Java中的getClass()方法
我们知道在Java中一切都是对象,我们一般所使用的对象都直接或间接继承自Object类.Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类. 类型类指的是代表一个 ...
最新文章
- 编写程序实验两个数的加减结果的判断_力学实验1:实验基础与实验仪器
- python3下载文件-Python3学习笔记(十八):文件上传和下载
- 第七章、Linux 文件与目录管理
- python的sorted函数对字典按key排序和按value排序
- MySQL笔记-ibd文件格式初步分析(仅数据块笔记)
- 502 proxy error解决方法_老大说,网上这种获取真实IP地址的方法不对,我不信......
- 如何重新安装win2008服务器系统分区,怎么解决安装server2008后磁盘分区消失的方法步骤...
- ElastcSearch的Mapping映射建立
- html制作一个视频播放器,H5 打造属于自己的视频播放器(HTML 篇)
- android 使用系统下载并更新版本,安卓系统更新升级的种方法
- c语言消消乐字母游戏代码,基于pygame的小游戏———数字消消乐
- android 9闪屏,android 9图片制作 显示会出现闪屏怎么处理
- 嵌入式BootLoader技术内幕
- BC渗透的常见切入点(总结)
- Python 高德地图经纬度与地址相互解析
- OHA Android
- 【Jira数据自动化】Jira接口请求(一)
- 嵌入式安防监控项目——前期知识复习
- 时尚一族青睐手机文学 手机阅读市场初现端倪
- logstash之ruby模块