Java中this与super的区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

this与super关键字在java中构造函数中的应用: 
**

super()函数

** 
super()函数在子类构造函数中调用父类的构造函数时使用,而且必须要在构造函数的第一行,例如:

class Animal {public Animal() {System.out.println("An Animal");}
}
class Dog extends Animal {public Dog() {super();System.out.println("A Dog");//super();错误的,因为super()方法必须在构造函数的第一行//如果子类构造函数中没有写super()函数,编译器会自动帮我们添加一个无参数的super()}
}
class Test{public static void main(String [] args){Dog dog = new Dog();}
}

执行这段代码的结果为:

An Animal 
A Dog

定义子类的一个对象时,会先调用子类的构造函数,然后在调用父类的构造函数,如果父类函数足够多的话,会一直调用到最终的父类构造函数,函数调用时会使用栈空间,所以按照入栈的顺序,最先进入的是子类的构造函数,然后才是邻近的父类构造函数,最后再栈顶的是最终的父类构造函数,构造函数执行是则按照从栈顶到栈底的顺序依次执行,所以本例中的执行结果是先执行Animal的构造函数,然后再执行子类的构造函数。

class Animal {private String name;public String getName(){name = name;}public Animal(String name) {this.name = name;}
}
class Dog extends Animal {public Dog() {super(name);}
}
class Test{public static void main(String [] args){Dog dog = new Dog("jack");System.out.println(dog.getName());}
}

运行结果:

jack

当父类构造函数有参数时,如果要获取父类的private的成员变量并给其赋值作为子类的结果,此时在定义子类的构造函数时就需要调用父类的构造函数,并传值,如上例所示。

this()函数

this()函数主要应用于同一类中从某个构造函数调用另一个重载版的构造函数。this()只能用在构造函数中,并且也只能在第一行。所以在同一个构造函数中this()和super()不能同时出现。 
例如下面的这个例子:

class Mini extends Car {Color color;//无参数函数以默认的颜色调用真正的构造函数public Mini() {this(color.Red);}//真正的构造函数public Mini(Color c){super("mini");color = c;}//不能同时调用super()和this(),因为他们只能选择一个public Mini(int size) {super(size);this(color.Red);
}

`所以综上所述,super()与this()的区别主要有以下: 
不同点: 
1、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用 
2、super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用 
相同点: 
1、super()和this()都必须在构造函数的第一行进行调用,否则就是错误的

转载于:https://my.oschina.net/architectliuyuanyuan/blog/1615650

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

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

相关文章

EF选择Mysql数据源

EF添加ADO.NET实体模型处直接选择Mysql数据源 最近想到EF是连接多数据库的orm框架,于是就想测试下。查了一堆网上资料后,测试连接mysql成功。步骤如下: 1、在你项目Model层中nuget安装MySql.Data.Entity 如果没安装这个provider 就进行下面的…

JIRA简介及基本概念

目录 第一章 JIRA简介 1.1 什么是JIRA 1.2 JIRA的主要功能 1.3 JIRA的主要特点 1.3.1 JIRA的优点 1.3.2 JIRA的缺点 1.4 相关版本 第二章 JIRA的基本概念 2.1 JIRA 中涉及的角色 2.1.1 管理人员 2.1.2 项目管理者 2.1.3 开发人员 2.1.4 测试人员 2.2 问题 2.2.1…

CodeChef Chef and Churu [分块]

题意: 单点修改$a$ 询问$a$的区间和$f$的区间和 原来普通计算机是这道题改编的吧... 对$f$分块,预处理$c[i][j]$为块i中$a_j$出现几次,$O(NH(N))$,只要每个块差分加上然后扫一遍就行了不用树状数组之类的 修改,整块直接…

SkiaSharp 之 WPF 自绘 拖曳小球(案例版)

感谢各位大佬和粉丝的厚爱和关心( 催更),我会再接再厉的,其实这也是督促自己的一种方式,非常感谢。刚写了一篇万字长文,自己也休养生息(低调发育)了一段时间,接下来来几个小案例。拖曳小球WPF的拖曳效果,基…

ABP学习资源整理

不同的编程语言都有构建Web Application的框架,比如C#中的ASP.NET Core和ABP,Java中的Spring Boot和Spring Cloud,Python中的Django和Flask,Node.js中的Express和Koa2,Go中的Beego和Gin等。今天要介绍的主角是ABP框架&…

【ArcGIS微课1000例】0049:制图表达(4)---自由式制图表达

文章目录 一、转换为自由表达并编辑二、将效果转换为几何当编辑地图时,可能会遇到一个独特的或显著的特征,需要专门的符号的情况,可以使用覆盖的制图表达来实现,但是往往不够。可能需要简单地绘制一个图形以达到要求的外观,这时可以尝试使用自由式制图表达。 自由式制图表…

基于FPGA的异步FIFO设计

今天要介绍的异步FIFO,可以有不同的读写时钟,即不同的时钟域。由于异步FIFO没有外部地址端口,因此内部采用读写指针并顺序读写,即先写进FIFO的数据先读取(简称先进先出)。这里的读写指针是异步的&#xff0…

EJB

Enterprise JavaBean,企业级javabean,是J2EE的一部分,定义了一个用于 开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 是Java的核心代码,分别是会话Bean(Session Bean),实体Be…

WinForm(一):开始一个WinForm程序

WinForm程序只能运行在Windows上,即使是基于.NET5,6,7也一样。因为WinForm的UI层对接的底层API是基于Windows的。用VisualStudio创建一个WinForm应用很简单,建议使用非.NET Framework版,因为.NET Framework微软渐渐不支…

【ArcGIS微课1000例】0050:Geodatabase属性域操作全解

文章目录 1. 属性域的创建2. 属性域的查看3. 属性域的删除与修改4. 属性域的关联地理数据库按照面向对象的模型存储地理信息,也可以将其非空间信息保存在表中。对于要素和表可以设置一些规则进行限制,对属性的约束称为属性域。 属性域是描述字段合法值的规则,是一种增强数据…

『JavaScript』核心

为什么80%的码农都做不了架构师?>>> 弱类型语言 JavaScript是一种弱类型的语言。变量可以根据所赋的值改变类型。原始类型之间也可以进行类型转换。其弱类型的物质为其带来了极大的灵活性。 注意:原始类型使用值传递,复合类型使用…

优酷VIP会员周卡只需7.5元,看《沉香如屑》用优酷视频

由杨紫、成毅主演的《沉香如屑》已上线7天。站内热度值已经破万,也拿下了4次日冠的好成绩。追优酷视频最新热剧不能没有优酷VIP会员啊,优酷的会员,价格算是最便宜的了,下面是幻海优品优酷VIP会员特价充值的价格。优酷VIP会员特价充…

Solr6.1.0Windows安装步骤

一、 环境 solr 6.1.0 下载地址 http://archive.apache.org/dist/lucene/solr/6.1.0/ jdk 1.8 tomcat8 二、 安装solr到tomcat 1.解压solr,把 solr-6.1.0\solr-6.1.0\server 下的solr-webapp 文件夹拷贝到tomcat 的webapps下,重命名为solr;…

[转]Autofac 框架初识与应用

一、前言 这上一篇中,主要讲述了什么是IoC容器,以及了解到它是DI构造函注入的框架,它管理着依赖项的生命周期以及映射关系,同时也介绍实践了在ASP.Net Core中,默认提供的内置IoC容器,以及它的实例注册方式和相应的生命…

【ArcGIS微课1000例】0051:Geodatabase子类型操作全解

子类型是要素类中具有相同属性的要素的子集,或表中具有相同属性的对象的子集。可 通过它们对数据进行分类。 子类型是特征类(或对象类)中特征(或对象)的次级分类。例如一个公路线要素类可以根 据其字段类型的值细分为“高速公路”和“普通公路”两个子类型。 子类…

在Winform程序中设置管理员权限及为用户组添加写入权限

在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身份运行,或者设…

数据库性能系列之索引(上)

前言上一次,我们从优化子查询的角度,讲解了一些简单的数据库性能优化方面的知识。通过优化子查询的顺序,包括合理使用IN和EXISTS,可以起到部分查询的效率提升。但对于其他大多数场景,如单表记录很大,或多表…

【ArcGIS微课1000例】0052:创建地理数据库注记(标准注记、要素关联注记、尺寸注记)

本文讲述创建地理数据库注记(标准注记、要素关联注记、尺寸注记)的方法。 文章目录 一、创建标准注记二、创建与要素关联的注记三、创建尺寸注记一、创建标准注记 标准注记不与地理数据库中的要素关联。标准注记的一个例子是,地图上标记某山脉的文字,没有特定的要索代表该…

Lambda表达式超详解

目录 背景 Lambda表达式的用法 函数式接口 Lambda表达式的基本使用 语法精简 变量捕获 匿名内部类 匿名内部类中的变量捕获 Lambda的变量捕获 Lambda表达式在类集中的使用 Collection接口 List接口 Map接口 总结 背景 Lambda表达式是Java SE 8中的一个重要的新特性.…