Java知多少(28)super关键字

super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类。

super 可以用在子类中,通过点号(.)来获取父类的成员变量和方法。super 也可以用在子类的子类中,Java 能自动向上层类追溯。

父类行为被调用,就好象该行为是本类的行为一样,而且调用行为不必发生在父类中,它能自动向上层类追溯。

super 关键字的功能:

  • 调用父类中声明为 private 的变量。
  • 点取已经覆盖了的方法。
  • 作为方法名表示父类构造方法。

调用隐藏变量和被覆盖的方法

 1 public class Demo{
 2     public static void main(String[] args) {
 3         Dog obj = new Dog();
 4         obj.move();
 5     }
 6 }
 7 class Animal{
 8     private String desc = "Animals are human's good friends";
 9     // 必须要声明一个 getter 方法
10     public String getDesc() { return desc; }
11     public void move(){
12         System.out.println("Animals can move");
13     }
14 }
15 class Dog extends Animal{
16     public void move(){
17         super.move();  // 调用父类的方法
18         System.out.println("Dogs can walk and run");
19         // 通过 getter 方法调用父类隐藏变量
20         System.out.println("Please remember: " + super.getDesc());
21     }
22 }

运行结果:

Animals can move
Dogs can walk and run
Please remember: Animals are human's good friends

move() 方法也可以定义在某些祖先类中,比如父类的父类,Java 具有追溯性,会一直向上找,直到找到该方法为止。

通过 super 调用父类的隐藏变量,必须要在父类中声明 getter 方法,因为声明为 private 的数据成员对子类是不可见的。

调用父类的构造方法

在许多情况下,使用默认构造方法来对父类对象进行初始化。当然也可以使用 super 来显示调用父类的构造方法。

 1 public class Demo{
 2     public static void main(String[] args) {
 3         Dog obj = new Dog("花花", 3);
 4         obj.say();
 5     }
 6 }
 7 class Animal{
 8     String name;
 9     public Animal(String name){
10         this.name = name;
11     }
12 }
13 class Dog extends Animal{
14     int age;
15     public Dog(String name, int age){
16         super(name);
17         this.age = age;
18     }
19     public void say(){
20         System.out.println("我是一只可爱的小狗,我的名字叫" + name + ",我" + age + "岁了");
21     }
22 }

运行结果:

我是一只可爱的小狗,我的名字叫花花,我3岁了

注意:无论是 super() 还是 this(),都必须放在构造方法的第一行。

值得注意的是:

  • 在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。
  • 不能在构造方法以外的任何方法内调用构造方法。
  • 在一个构造方法内只能调用一个构造方法。


如果编写一个构造方法,既没有调用 super() 也没有调用 this(),编译器会自动插入一个调用到父类构造方法中,而且不带参数。 

最后注意 super 与 this 的区别:super 不是一个对象的引用,不能将 super 赋值给另一个对象变量,它只是一个指示编译器调用父类方法的特殊关键字。

系列文章:

Java知多少(上)

Java知多少(中)

转载于:https://www.cnblogs.com/Coda/p/4399243.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样写出简洁的css代码??★★★★

base.css 设置各种默认值: html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, …

《中国大数据产业白皮书及百强榜单》:一览中国大数据产业发展全局

来源:网络大数据摘要:近日,赛迪顾问重磅发布了《中国大数据产业白皮书及百强榜单》。《中国大数据产业白皮书及百强榜单》从大数据整体市场方向分享了相关洞见,对大数据产业未来发展趋势进行了分析和预测。并梳理中国大数据投资价…

MVC3学习 八 Action和result过滤器及日志处理

在项目中很多地方需要用到面向切面的思想,比如说身份验证、日志功能这些。 过滤器可以理解为在执行某个功能时,额外执行的一段代码,在MVC中有Action和result过滤器, 分别都是在执行前和执行后进行过滤的,具体代码如下&…

万字报告做空特斯拉:马斯克在操盘一场“庞氏骗局”|硅谷封面

来源: 腾讯科技摘要:美国价值投资人俱乐部VIC日前发表文章,从产品需求减弱、安全性能差、资金缺口巨大、伊隆马斯克或被免职等多个角度着手进行分析,称目前是全力做空特斯拉(纳斯达克证券代码:TSLA&#xf…

内存对齐的规则以及作用

首先由一个程序引入话题&#xff1a; 1 //环境&#xff1a;vc6 windows sp2 2 //程序13 #include <iostream>4 5 using namespace std;6 7 struct st1 8 {9 char a ;10 int b ;11 short c ;12 };13 14 struct st215 {16 short c ;17 char a ;18 …

中国AI创新者论坛成功举办!这里有一份AI教育和医疗的落地秘籍

来源&#xff1a;THU数据派3月21日&#xff0c;由网易新闻、网易有道、清华数据院共同举办的以“创新&#xff0c;无界”为主题的“中国AI创新者论坛”在清华大学罗姆楼三层报告厅成功举办。律回岁晚冰霜少&#xff0c;春到人间草木知&#xff0c;初春的北京&#xff0c;顶级人…

C语言有参函数调用时参数间数据传递问题

C语言中在发生有参函数调用时&#xff0c;实参变量与形参变量之间的数据都是单向的“值传递”方式。包括指针变量和数组名作参数的情况。 C语言要求函数的实参要有确定的值&#xff0c;在函数调用时给形参分配相应的内存单元&#xff0c;同时将实参的“值”赋&#xff08;复制&…

windows下jenkins slave 搭建

一 创建新的Slave 注意Jenkins中slave称为note。 所以下面文章中的slave和node指的是一回事。 1&#xff09;在Manage Jenkins-->Manage Nodes -->New Node下&#xff1a;输入Node Name&#xff0c;且选择Dumb Slave作为Slave的类型&#xff0c;然后OK。 2&#xff09;在…

MEMS:万物智联技术关键

来源&#xff1a;Research摘要&#xff1a;MEMS技术在汽车电子、生物医疗、智慧家庭、工业物联网、消费电子等领域都有着广阔的市场前景。随着万物互联时代的加快到来&#xff0c;MEMS传感器将迎来新的浪潮。一、MEMS 是什么1、MEMS 定义MEMS&#xff08;Microelectromechanica…

C语言 变量声明和定义的区别

变量的声明有两种情况&#xff1a; 1、一种是需要建立存储空间的。例如&#xff1a;int a 在声明的时候就已经建立了存储空间。 2、另一种是不需要建立存储空间的。 例如&#xff1a;extern int a 其中变量a是在别的文件中定义的。 前者是“定义性声明&#xff08;defining dec…

2019年25大人工智能趋势!一文看到未来

来源&#xff1a;智东西摘要&#xff1a;2019年25个AI趋势。人工智能的下一步是什么&#xff1f;上周&#xff0c;知名机构CBinsights的分析师分析各个行业&#xff0c;得到了2019年最值得关注的25个人工智能趋势。虽然人工智能正在各个行业蔓延&#xff0c;经常成为头条新闻&a…

tomcat server.xml配置详解

元素名属性解释serverport指定一个端口&#xff0c;这个端口负责监听关闭tomcat的请求shutdown指定向端口发送的命令字符串servicename指定service的名字Connector(表示客户端和service之间的连接)port指定服务器端要创建的端口号&#xff0c;并在这个断口监听来自客户端的请求…

重磅!首次发现人类大脑海马体在短时间尺度上对时间信息敏感

来源&#xff1a;brainnews编译&#xff1a;南樛木早期对啮齿动物海马体的研究提供了情景记忆中海马体表达时间信息的一般神经机制证据。对记忆编码的方式涉及到许多信息&#xff0c;科学家们已经研究了其中大部分是如何工作的。但是有一个维度仍未得到解决&#xff1a;时间。最…

2015新款 MacBook 用心的测评与试用. 最轻薄的Mac上市

2015新款 MacBook 不一样的测评与试用. 最轻薄的Mac上市了. 直击现场 《HTML开发MacOSApp教程》 http://pan.baidu.com/s/1jG1Q58M 2015年的春季的苹果特别媒体发布会上, 苹果发布了超轻薄的 MacBook 产品. 或许当你阅读本文的时候已经看过不少跑分, 性能测试文章, 为了不让…

数字图像处理——图像的几何变换

这次学习图像的几何变换&#xff0c;主要有以下内容&#xff1a;图像的平移变换图像的镜像变换图像的转置变换图像的旋转变换图像的缩放1、图像的平移变换在进行书写matlab代码之前&#xff0c;先来了解一下图像平移的理论基础。设图像的高度为H&#xff0c;宽度为W&#xff0c…

万字长文解读运营商搏击5G:一场比拼财力的三国杀

来源&#xff1a;财经无忌摘要&#xff1a;5G时代已经来临&#xff0c;5G走向商用的步伐也在逐渐加快。近日&#xff0c;腾讯科技联合优质科技媒体推出“5G局中局”系列文章&#xff0c;为你解读5G在通讯、物联网、车联网、工业联网、边缘计算、云服务等各行业的应用&#xff0…

每天看一片代码系列(三):codepen上一个音乐播放器的实现

今天我们看的是一个使用纯HTMLCSSJS实现音乐播放器的例子&#xff0c;效果还是很赞的&#xff1a; codePen地址 HTML部分 首先我们要思考一下&#xff0c;一个播放器主要包含哪些元素。首先要有播放的进度信息&#xff0c;还有播放/暂停或者上一首下一首等必要的按钮&#xff0…

OpenCV——读取摄像头并处理图像

1、读取摄像头并处理图像的代码如下&#xff1a; #include<opencv2/opencv.hpp> using namespace cv;//-----------------------------------【main()函数】-------------------------------------------- // 描述&#xff1a;控制台应用程序的入口函…

MVP

MVP是一种广泛使用的UI架构模式&#xff0c;适用于基于事件驱动的应用框架。 能够与 Model直接进行交互的仅限于 Presenter, View 只能通过 Presenter 间拉地调用 Model。 MVP分PV&#xff08;Passive View) 和 &#xff08;Supervising Controller)两种模式 SC(Supervising Co…

OpenCV——图像显示与写入

1、图像显示与写入的代码如下&#xff1a; #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp>using namespace cv; using namespace std; //opencv中图像显示与写入 int main() {Mat myMat imread("小狗1.jpg", -1);if (myMat.em…