| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 谈谈Java中super关键字的用法和细节 -> 正文阅读 |
|
[Java知识库]谈谈Java中super关键字的用法和细节 |
写在前面:????因为西安疫情的原因在宿舍摆了一个月,最近在复习前面学过的知识的时候发现,自己在初学面向对象时对Super关键字的理解不够深刻,所以现在重新学习一下super关键字的用法和细节。 初学面向对象时的原文: super关键字的用法super关键字的使用细节super和this关键字的比较1. super关键字的用法????在Java中,super关键字共有三种用法,分别是:
调用父类的成员变量:
调用父类中的成员方法:
调用父类的构造器:
注意:
2. super关键字的使用细节当我们查找子类中的方法时,调用规则如下:
提示:如果直到Object类依然没有找到该方法,那么会提示方法不存在,但如果向上找到了这个方法但没有权限访问(例如该方法被private修饰),则会产生错误。
????在上述代码中,子类中的func1()方法在调用func2()方法时会在子类中查找是否存在func2()方法,未找到时会在其父类中查找func2()方法。 ????当我们将func1()中的语句 func2(); 改为 this.func2(); 此时语义未发生改变,依然会先在子类中查找,没有找到时会在其父类中查找。 ????当我们再将 this.func2(); 改为 super.func2(); 这时语义就发生了变化,上面提到过,super.方法名()调用的是父类中的方法,那么这条语句就不会检测当前类中是否存在func2()方法,只会在其父类中依次向上进行检测。例如:
注:成员属性与成员方法同理。 ????我们已经知道了,super关键字的访问并不仅仅局限于父类,即使是父类的父类,父类的父类的父类,甚至再往上,都可以通过super关键字访问到。那么,如果子类上面的多个类中都存在同样的成员,此时使用super关键字访问的是哪个类中的成员呢? ????当子类要访问上级类的某个成员,而子类的多个上级类都有该成员时,我们对super关键字的使用采用就近原则,也就是访问super关键字向上找到的第一个成员。例如:
????在上述代码中,子类通过super关键字访问上级类中的func2()方法,子类继承Test2,Test2继承Test3,此时Test2和Test3中都存在func2(),此时子类先访问其父类Test2,Test2中存在func2()方法,那么直接访问Test2中的func2()即可,若Test2中不存在func2(),则super关键字会继续向上访问。 3. super和this关键字的比较????下面这个表格列出了super关键字和this关键字的区别: ????这篇文章到这里就结束啦,文章中有错误的地方还请大佬指正,各位小伙伴别忘了点赞关注收藏哦,谢谢大家~~~ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:17:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |