java基础篇 之 super关键字的理解
2024-09-07 12:19:09
之前一直认为,super指向的是父类对象。到今天,仔细查询了资料,自己做了实验,确认这个结论是不对的。我们分一下几个点讨论下:
super的作用:
第一种:用来访问父类被隐藏的成员变量
第二种:用来调用父类中被重载的方法
第三种:用来调用父类的构造函数
super真的指向父类对象吗?
- 代码直接分析:
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对象,也就是子类对象
- 我们也可以从理论上分析,如果我们的父类是一个抽象类呢?在这种情况下,super可能指向一个抽象类对象吗?
- 综合上面两点,super指向父类对象,很明显是个错误的说法,那么正确的到底是什么的?
这就要结合我们开篇就说过的,super的作用来说明一下了,我这里只说说我的看法,仅供大家参考:
我觉得,super跟this都是指向的同一个对象,比如上面的sub对象,这个sub既有自己的方法,也有从父类中继承而来的方法,但是对于super跟this不同的是(这里主要指子类复写父类方法,跟子父类中有同名属性),如果通过super调用,那么对于这个复写的方法而言,父类中的方法的优先级会大于子类,所以,通过super调用时,可以访问到父类被子类重写的方法。
以上是我自己的理解,仅供参考,有不对的地方欢迎指出~
最新文章
- jQuery仿阿里云购买选择购买时间长度
- ScrollView
- jquery 文本域光标操作(选、添、删、取)
- Arduino可穿戴开发入门教程(大学霸内部资料)
- ArcBruTile 0.2.2
- table表格的属性
- [HDOJ2473]Junk-Mail Filter(并查集,删除操作,马甲)
- Centos 5.2安装配置DNS服务器
- js获取随机颜色
- SVN - 笔记
- 关于Docker中的Images与Containers
- (转) Spring Boot JDBC 连接数据库
- Spring(二)
- SDRAM操作(FPGA实现)
- apache服务器主域名跳转www域名
- Android Glide详细使用教程
- MongoDB的常用命令和增查改删
- 转:EditPuls 5.0 注册码
- https://stackoverflow.com/questions/51751426/failed-to-run-the-da-platform-trial-vm
- Modelsim添加Lattice库