​ 之前一直认为,super指向的是父类对象。到今天,仔细查询了资料,自己做了实验,确认这个结论是不对的。我们分一下几个点讨论下:

super的作用:
第一种:用来访问父类被隐藏的成员变量
第二种:用来调用父类中被重载的方法
第三种:用来调用父类的构造函数
super真的指向父类对象吗?
  1. 代码直接分析:
public class Super {
public void test() {
System.out.println("super test 执行了");
}
}
public class Sub extends Super {
@Override
public void test() {
super.test();
System.out.println("Sub test执行了");
}
}
public class Main {
public static void main(String[] args) {
Sub sub = new Sub();
sub.test();
}
}

我们直接断点调试,可以发现:

这里的super明明就是指向的一个Sub对象,也就是子类对象

  1. 我们也可以从理论上分析,如果我们的父类是一个抽象类呢?在这种情况下,super可能指向一个抽象类对象吗?
  2. 综合上面两点,super指向父类对象,很明显是个错误的说法,那么正确的到底是什么的?

这就要结合我们开篇就说过的,super的作用来说明一下了,我这里只说说我的看法,仅供大家参考:

我觉得,super跟this都是指向的同一个对象,比如上面的sub对象,这个sub既有自己的方法,也有从父类中继承而来的方法,但是对于super跟this不同的是(这里主要指子类复写父类方法,跟子父类中有同名属性),如果通过super调用,那么对于这个复写的方法而言,父类中的方法的优先级会大于子类,所以,通过super调用时,可以访问到父类被子类重写的方法。

以上是我自己的理解,仅供参考,有不对的地方欢迎指出~

最新文章

  1. jQuery仿阿里云购买选择购买时间长度
  2. ScrollView
  3. jquery 文本域光标操作(选、添、删、取)
  4. Arduino可穿戴开发入门教程(大学霸内部资料)
  5. ArcBruTile 0.2.2
  6. table表格的属性
  7. [HDOJ2473]Junk-Mail Filter(并查集,删除操作,马甲)
  8. Centos 5.2安装配置DNS服务器
  9. js获取随机颜色
  10. SVN - 笔记
  11. 关于Docker中的Images与Containers
  12. (转) Spring Boot JDBC 连接数据库
  13. Spring(二)
  14. SDRAM操作(FPGA实现)
  15. apache服务器主域名跳转www域名
  16. Android Glide详细使用教程
  17. MongoDB的常用命令和增查改删
  18. 转:EditPuls 5.0 注册码
  19. https://stackoverflow.com/questions/51751426/failed-to-run-the-da-platform-trial-vm
  20. Modelsim添加Lattice库

热门文章

  1. 实战|使用Spark Streaming写入Hudi
  2. 【Tool】IDEA 连接数据库
  3. SpringCloud-Ribbon负载均衡机制、手写轮询算法
  4. [数据库]Mysql蠕虫复制增加数据
  5. JDBC教程——检视阅读
  6. Java工作流程引擎系统的退回规则 专题说明
  7. 数据库 MySQL 练习
  8. 元素均匀排列自动换行&二维数组前端遍历
  9. 2019-2020-1 20199328《Linux内核原理与分析》第十二周作业
  10. 如何优雅的维护 K8S Worker 节点