一直都说this指的是当前对象,super指的是父类对象。但是对这个this理解还是不透彻,今天看effective java 第14条,有个例子一直不理解:

package com.zgd;public class SuperTest {public static void main(String[] args) {Parent c = new Parent();c.addAll();}
}class Parent{public void add(){System.out.println("A add...");}public void addAll(){System.out.println("A add ALL...");add();//在父子类之间,如果在父类中使用this关键字,那么运行子类时如果走到this行,指的是子类而不是父类。//谁调用,this就是指谁System.out.println(this.getClass());}
}class Child extends Parent{@Overridepublic void add() {// TODO Auto-generated method stubSystem.out.println("B add...");super.add();}@Overridepublic void addAll() {// TODO Auto-generated method stubSystem.out.println("B add ALL...");super.addAll();}}

最后输出的结果是
B add ALL...
A add ALL...
B add...
A add...
按我的理解,super.addAll()方法调用来Parent中的addAll(),而Parent中的addAll()调用了add()。这里的add最后调用的是Child的add(),既然是super.addAll(),为何最后竟然调用的是子类的add()方法。。。

这里涉及到的问题是当子类调用super走到父类的方法中,这时的对象this到底是指Child子类还是父类Parent?

正确答案是子类,this.add();其中的this是指当前对象,也就是Child c = new Child();中的c.

因此虽然是在父类中执行的add方法,但实际上执行的是子类的add方法

在父类的add 方法中

System.out.println(this.getClass());
结果是Child而不是Parent!

子类调用父类方法中的this相关推荐

  1. c++中子类调用父类方法的方法

    在c++中子类调用父类方法的方法和java所用的方式不一样, java使用super指针就可以调用,c++中虽然也有this指针,但是不能用super去调用父类方法. c++用的方法为:fatherC ...

  2. 子类调用父类方法时,方法中的变量用谁的

    public class T1 {private int a=6;public void ha(){System.out.println(this.a);} } public class T2 ext ...

  3. 【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )

    文章目录 类的继承 方法的重写 子类中调用父类方法 多态 虚函数 虚函数示例 纯虚函数 相关代码 类的继承 1. 继承表示 : C++ 中继承可以使用 ":" 符号 , 格式为 & ...

  4. qt 子类调用父类的函数_子类调用父类方法

    当有相同的属性或者方法是this子类表示调用自己的属性或者方法, super调用父类的属性或者方法. 当子类调用的属性方法在子类中不存在时,那么this和super都是调用父类的属性或者方法 1.方式 ...

  5. 【Python】继承、父类、子类、方法重写、子类调用父类方法、super()函数、多继承

    Python继承 2021/6/21 周一 学习内容:父类.子类.方法重写.子类调用父类方法.super()函数.多继承 Python入门,主要是看 菜鸟教程.w3school 网站,以及电子工业出版 ...

  6. C++——子类调用父类方法

    C++--子类调用父类方法 原创声明:本文系博主原创文章,转载或引用请注明出处. 1. 如果类B是类A的子类,则在类B的成员方法中调用类A的方法时,可以直接以 A::method(paramlist) ...

  7. C++基础之子类调用父类方法

    结果: 和 结果 效果一样,想要说明一下三点: 1. vs里成员函数的函数体就算只有一条语句也要加花括号,如第7-9行 2. 25行想通过子类调用父类函数fun(int i),通过B1.A::fun( ...

  8. python类子类调用父类方法总结

    先说下,有3种方法,如下 class Animal():def __init__(self, age):self.age=ageclass Cat(Animal):def __init__(self, ...

  9. 关于Java中子类调用父类方法

    当一个类继承于另一个类,子类中没有父类的方法时.用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找. 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性.  如果 ...

最新文章

  1. 让VisualSVN Server支持匿名访问
  2. 手机端部署的超分机器学习模型-MobiSR
  3. 都说不要装箱,那装箱到底带来了什么开销?
  4. random---伪随机数生成器
  5. CentOS7安装Docker,运行Nginx镜像、Centos镜像
  6. android显示网络gif图片
  7. 拔染印花的主要特点和工艺技术
  8. 一张图学会python3语法-一张图理清 Python3 所有知识点
  9. 【地理工具学习—MapGIS教程】常见问题处理
  10. python批量创建txt文件
  11. 哪种博客程序更适合国内使用?
  12. MFC双人五子棋(VS2019)
  13. 项目总结--3(@Cacheable的使用方法和使用技巧)
  14. amixer alsa
  15. 自助查询工具需求分析
  16. 爱克发胶片_GE/AGFA爱克发工业胶片系统
  17. 图片去栅栏的代码实现
  18. 笛卡尔空间轨迹规划(直线、圆弧)
  19. HTML+CSS系列教程
  20. 【数据分析】如何在企业中从0-1建立一个数据/商业分析部门

热门文章

  1. 计算机科学与技术研究生学校排行,科研院所_学科水平排行_排行榜_中国学位与研究生教育信息网...
  2. 商城 mysql语句_简单商城的数据库建表sql
  3. 京东360联姻 合作有深意
  4. python模拟登陆川农大教务系统----requests库
  5. safari可以打开但是鼠标点不了,还有嘟嘟声
  6. 项目 开发团队分配管理软件
  7. 珍惜你的爱人,祝福你爱的人,善待爱你的人
  8. python统计字符串中单词个数、单词之间用空格分割_输入一行字符,统计其中有多少个单词,单词之间用空格分隔开...
  9. 【3DMax】二维修改器
  10. ps自由变化快捷键,取消选区。如何取消钢笔工具的选区