转转转!java继承中的this和super
学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云。只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键的,产生的印象才是最深的。针对文章标题,先看一下以下代码:
public class FatherChild {
public static void main(String[] args) {
// 主方法开始
Child c = new Child();
// 实例化
}
}
class Father {
public Father() {
System.out.println( "父类无参构造函数" );
}
public Father(String name) {
System.out.println( "父类有参构造函数" );
}
}
class Child extends Father {
public Child() {
this ( "dd" );
System.out.println( "子类无参构造函数" );
}
public Child(String name) {
super ( "dd" );
System.out.println( "子类有参构造函数" );
}
}
|
代码运行的结果:
父类有参构造函数 子类有参构造函数 子类无参构造函数
为什么会有以上的结果呢?让我们先了解一下java的继承:
继承是一种由已有的类创建新类的机制。利用继承,可以先创建一个拥有共同属性的一般类,根据该一般类再创建具有特殊属性的新类。由继承而得到的类称为子类(Subclass),被继承的类被称为父类(Superclass)。
直接或间接被继承的类都是父类。子类继承父类的状态和行为,同时也可以修改父类的状态和行为,并添加新的状态和行为。Java中不支持多重继承。
以上代码中Child类继承了Father类,在FatherChild类中执行Child c = new Child();时,会调用Child类的无参构造方法,在其无参的构造方法中有这样一句代码:this("dd");这又是神马意思呢?这时我们就有必要来了解一下java继承中this与super关键字的作用了:
this的第一个作用 java中在一个构造方法中可以调用一次其他的构造方法,并且这条语句必须在这个构造方法的第一行,this表示调用它的对象 this的第二个作用 表示引用成员变量i(而不是形参i) 将局部变量或形参赋值给成员变量的这种情况,通常可以省略this,如写为:i=i;java编译器会自动将=左边的i当成成员变量,=右边的当成形参。但不利于阅读代码 this的第三个作用 返回当前对象 super的用法与this类似,主要用于调用父类构造方法
对于继承中的构造方法有以下说明:
1.子类的构造过程中必须调用其基类的构造方法;
2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法;
如果调用super,必须写在子类构造方法的第一行;
3.如果子类的构造方法中没有显式调用基类构造方法,则系统默认调用基类无参数的构造方法;
4.如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。
那么我们就可以明白,child类中无参构造方法中的this("dd");这句代码其实是调用了Child类中的有参构造方法,而其有参构造方法中又super(“dd”);调用了父类的有参构造方法,所以才有了以上的打印结果。
转载于:https://www.cnblogs.com/tenWood/p/6523741.html
转转转!java继承中的this和super相关推荐
- java 继承 子类 实例化_关于Java继承中父类和子类构造函数的问题
Java子类在实例化时默认调用的是父类的无参构造函数,不论实例化时调用的是子类的有参还是无参构造函数, 1.当父类没有显式定义构造方法时, 编辑器会默认为此类添加一个隐式无参构造函数.此时子类可以有自 ...
- python 多继承与super使用详解_继承中的MRO与super详解
Python进阶-继承中的MRO与super 写在前面如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,super ...
- Java继承中的子类父类构造方法的调用
Java的继承中,关于子类和父类构造方法的使用. 子类在初始化时,一定会调用父类的构造方法. 原因如下: 在子类继承父类时,子类会继承父类所有的公共成员变量,公共方法,这些方法在子类中不再重复声明. ...
- java继承中构造方法_java之继承中构造方法总结(文字版)
子父类中的构造方法的特点 1. 在子类构造对象时,发现访问子类构造方法时,父类也运行了.为什么呢? 答:因为,在子类构造方法中第一行有一个默认的隐式语句:super(); 子类的实例化过程:子类中所有 ...
- Java继承中成员变量和成员函数的覆盖
2019独角兽企业重金招聘Python工程师标准>>> 关于继承中变量和方法的覆盖: 1, 与基类中同名的变量,会被派生类所覆盖(同时存在但是有独立的值),直接取值将是派生类的值,但 ...
- java可以继承私有的,在java继承中,私有属性能否被继承
其实在继承中,子类可以继承父类的私有属性的内容空间,但是不能继承父类私有属性的访问权限,下面看代码 父类Animal public class Animal { private String name ...
- Java泛型中extends T和super T的区别?
<? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...
- java继承中的一些该注意的问题
关于继承,我想大多数人都知道,它是面向对象语言中的三大特性之一,所以在这里,关于继承的概念等我就不做详细介绍了,我主要就讲一下大家对他的认识中一些比较容易犯的错误吧. 错误认识1.继承,是将父类中 ...
- java继承的关键字_超级关键字在Java继承中的作用
可以使用Java中的super关键字来引用父类对象.它通常在继承的上下文中使用.给出了一个用Java演示super关键字的程序,如下所示: 示例class A { int a; A(int x) { ...
最新文章
- python爬虫经典教程-python爬虫经典例子有哪些
- ETL工具 kettle问题
- netty系列之:从零到壹,搭建一个SOCKS代理服务器
- $.post请求的参数在后台代码中得到为null_vue中Axios的封装和API接口的管理
- 技术论坛 | CCF YOCSEF上海即将在 CNCC 举办“知识图谱遇见社交媒体”专题论坛
- form表单中根据值判断是否disabled_Java 0基础入门 (Html表单、表单元素)
- MySQL安全***实战指南之体系结构篇
- 检查数组中的子字符串– Java,Python和Swift
- Cesium源码剖析---Post Processing之物体描边(Silhouette)
- python中mid_Python生成音乐 之 mido库读取midi文件
- C++第三方库HPSocket数据的发送与接收
- win10初始化mysql出现失败怎么办_win10初始化电脑出现问题未进行任何更改怎么办...
- 从“Liskov替换原则”和“Refused Bequest”看“正方形为什么不能继承长方形”
- 【散文】 漫步在春天
- C51单片机实现 贪吃蛇
- git提交提示workspace.xml出现conflicted
- Elastic认证特训营 难点解读04——集群问题排查实战指南
- textfield监听输入汉字数量
- java 多线程垃圾回收_Java 垃圾回收
- 【思考】开学第一课--大学的终结,终生学习
热门文章
- Entity Framework在三层架构中的使用
- 后台向前台js传递参数
- CV《物体识别与检测4 - 人脸验证》
- php环境模拟stphp_用php模拟做服务端侦听端口
- 数学物理方法pdf_中考状元笔记九科(语文+数学+物理+化学+英语+历史+地理+政治+生物)(高清PDF);...
- LSTM模型结合LDA对序列性文本建模 阅读笔记 2017 ICML
- Apache PDFbox快速开发指南
- 图的单源最短路径(Dijkstra算法)
- 设计模式学习笔记——代理(Proxy)模式
- vm的红帽linux怎样安装教程,vmware10怎么安装linux_redhat7系统安装教程