父类方法中的this
一直在用一些东西,却总是感觉有一些疑惑,今天发现了自己一个及其致命的意识错误。关于父类中this关键字到底是谁的问题。请看代码
父类Parent
- public class Parent {
- public Parent(){
- System.out.println("父类自己---->"+this);
- }
- public void onCreate(){
- System.out.println("父类中的---->"+this);
- ObjectCollectionUtils.addObject(this);
- }
- }
子类Son
- public class Son extends Parent{
- public Son() {
- onCreate();
- }
- @Override
- public void onCreate() {
- super.onCreate();
- }
- }
工具类ObjectCollectionUtils
- public class ObjectCollectionUtils {
- private static List<Object> list = new ArrayList<>();
- public static void addObject(Object object){
- System.out.println("工具类add--->"+object);
- list.add(object);
- }
- }
测试类test
- public class test {
- public static void main(String[] args) {
- Son son1 = new Son();
- System.out.println("子类---->"+son1);
- Son son2 = new Son();
- System.out.println("子类---->"+son2);
- Son son3 = new Son();
- System.out.println("子类---->"+son3);
- }
- }
因为我是搞android的,所以这几个类其实就是简单的模仿android中常用功能技巧BaseActivity和ActivityCollection的类的使用。不说这几个类为什么要这样写了,我们就来看看父类中this这个关键字打印出的东西到底是什么?如果不明白onCreate方法是干什么的,那就忽略就行,咱们看构造函数中输出的this是什么吧。
我们最常听到的一句话就是不管在哪,this关键字指的都是当前对象,那么在父类Parent构造函数中输出的this一个喝子类Son构造函数中输出的this分别是父类当前引用和子类的当前引用。那么我们来看一下输出结果:
- 父类自己---->Son@670b5064
- 父类中的---->Son@670b5064
- 工具类add--->Son@670b5064
- 子类---->Son@670b5064
- 父类自己---->Son@c33f45e
- 父类中的---->Son@c33f45e
- 工具类add--->Son@c33f45e
- 子类---->Son@c33f45e
- 父类自己---->Son@26f04d94
- 父类中的---->Son@26f04d94
- 工具类add--->Son@26f04d94
- 子类---->Son@26f04d94
不知道大家有没有猜对这个结果呢?不管是父类中调用工具类的时候传入的this,还是父类中构造方法的this,亦或者是父类中普通方法onCreate中的this,都是指子类对象的this。因为我个人在平时的使用过程中,对this和super的使用也不会出现错误,都能正确使用,但是最近这个疑惑一直让我觉得很可疑,所以今天写几个类测试一下。我说一下我为什么会觉得父类中的this应该是父类本身对象的this(这是错误的想法),子类实例化的过程会先去执行父类的构造函数,这个大家肯定都是知道,但我过去错误的以为,执行了父类的构造函数意味着新建了父类的对象.......,所以我才会觉得父类中的this指的应该是父类的对象引用。但是,其实我上面写的这些类的过程中,仅仅的是创建了son1,son2,son3这个子类对象,虽然都走了父类的构造函数,但是并不创建父类对象,所以父类中的this便指的是他子类的具体this。over!!!
注意:我做的测试是,实例化子类,看父类中this关键字是谁。若你们正常去是实例化父类,那么你执行父类中相应的方法,那么方法中的this值得就是父类对象本身的引用,希望有些人看了以后不要被误导,所以强调一下。
父类方法中的this的更多相关文章
- python 父类方法中使用不同的子类中的不同类对象
# coding:utf-8 class Animal(object): def __init__(self): self._name = None self._f = None def eat(se ...
- struts2 action配置时 method 省略不写 默认执行方法是父类ActionSuppot中的execute()方法
struts2 action配置时 method 省略不写 默认执行方法是父类ActionSuppot中的execute()方法
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
Python 在子类中调用父类方法详解(单继承.多层继承.多重继承) by:授客 QQ:1033553122 测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...
- 关于Java中子类调用父类方法
当一个类继承于另一个类,子类中没有父类的方法时.用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找. 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性. 如果该 ...
- python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,在pyth ...
- Java中子类覆盖父类方法所必须满足的条件
因为太喜欢,所以转来,侵删! 参考自:http://www.it165.net/pro/html/201504/39284.html 一.描述 子类重写(覆盖)父类的方法必须满足的条件:1.父类中的方 ...
- python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. 派生:子类继承了父类的属性,然后衍生出自己新的属性,如果子类衍生出的新 ...
- 【Python】Python中子类怎样调用父类方法
python中类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函数,就覆盖了父类的这个函数,既然继承父类, ...
- java继承-子类调用父类的方法中包含子类重写的方法
# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了... # 先看代码: public class Common { public static void main(String[] args ...
随机推荐
- Xcode命令行生成Bitcode静态库
近两三年一直在做静态库开发 1.在Xcode工程中创建静态库的Target,最初是手动Build出真机的.a文件,模拟器的.a文件,然后再用命令行合并 2.后来一些特殊的开发者,要求加入特殊的功能,或 ...
- VirtualBox Win7 虚拟机 共享文件夹设置
1.主机(Win10) 点击共享文件夹,例如D:\VMs\Sharefolder\,选择'属性->共享->共享',选择'Everyone',点击'添加',权限级别'读取/写入',然后一路点 ...
- HTML 中按钮作为form表单元素提交特性两则 --- 参HTML考标准分析
相同name的submit 类型的input提交行为 描述 这种情况, <input type="submit" name="ACTION" value= ...
- (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句
(喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句 在我们RDIFramework.NET代码生成器中,有这样一个应用,就是通过数据库表自动生成表的CREA ...
- 开发环境中biztalk项目设置注意事项(转)
适用版本:biztalk 2006 适用环境:开发测试环境 在开发过程中,在开发环境中,一定会是一个对项目不断的修改.编译.部署.测试,查看测试结果,发现有问题,然后回到开发环境再修改.编译.部署 ...
- jQuery与其他JS库冲突解决
实际开发中遇到JQuery与其他js库起冲突 究其原因,是它们的全局对象定义冲突了,特别是变量”$”, 可重载$函数.使用jQuery.noConflict()就可以通过重载$函数 例:项目中应用的 ...
- 设置IE默认文本模式的方法
设置IE默认文本模式的方法 <meta http-equiv="X-UA-Compatible" content="IE=8" /> IE=5.6. ...
- Redundant Paths-POJ3177(并查集+双连通分量)
Redundant Paths Description In order to get from one of the F (1 <= F <= 5,000) grazing fields ...
- 有向图的强连通图——Kosaraju
有向图的强连通分量: 相互可达关系,每一个集合都是有向图的一个强连通分量SCC. 把一个集合看成一个点,SCC就形成了一个有向无环图——DAG; 如果DFS选择不好,从A点开始DFS,就会 ...
- C# 4.0中dynamic的作用
internal sealed class Coffee { public string GetName() { return "You selected Maxwell coffee.&q ...