学习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”);调用了父类的有参构造方法,所以才有了以上的打印结果。

JAVA 继承中的this和super的更多相关文章

  1. 转转转!java继承中的this和super

    学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...

  2. 8、java继承中的this和super的应用

    java中只支持单继承,这是为了防止继承的父类中出现同样的函数不知道调用哪个好.虽然java只支持单继承但是有多实现来补偿. 子父类出现后,类成员的特点: 类中成员:1,变量.2,函数.3,构造函数. ...

  3. Java 继承中构造方法的执行顺序问题

    在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1. ...

  4. Python进阶-继承中的MRO与super

    Python进阶-继承中的MRO与super 写在前面 如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,supe ...

  5. java继承中关于super关键字和this关键字的使用

    1.super关键字 由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,可以使用 super 关键字.super 可以用来访问父类的构造方法.普通方法和属性.super 关键字的功能: ...

  6. Java继承中的转型及其内存分配

    看书的时候被一段代码能凌乱啦,代码是这样的: package 继承; abstract class People { public String tag = "疯狂Java讲义"; ...

  7. [Java] 继承中,父类被覆盖的成员变量、方法的可访问性

    在 Java 的继承机制里,在子类内部,可以访问父类被覆盖的变量和方法:在子类外部,可以访问父类的被覆盖变量,但是不能访问父类的被覆盖方法. 父类中被覆盖的方法不能在外部被方法,这是出于封装的考虑. ...

  8. 【Java学习笔记之二十二】解析接口在Java继承中的用法及实例分析

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  9. 【Java学习笔记之二十】final关键字在Java继承中的用法小结

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...

随机推荐

  1. Git-多人协作

    声明: 此文参考廖雪峰老师的官方网站知识总结http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017 ...

  2. 10分钟精通SharePoint - SharePoint升级

    类型: b2b(安装更新)和v2v(跨版本升级) 内容:二进制文件和数据库 过程:   升级前检查 - 检查场内数据,配置和自定义等等 升级准备和计划 - 根据需要和升级检查制定相应计划和准备工作   ...

  3. SVN操作手册(part1&part2)——SVN安装

    SVN操作手册 1.关于SVN 有一个简单但不十分精确比喻: SVN = 版本控制 + 备份服务器 简单的说,您可以把SVN当成您的备份服务器,更好的是,他可以帮您记住每次上传到这个服务器的档案内容. ...

  4. java操作txt文本(一):遇到指定字符换行

    想法由来:有时查看网页源代码的css文件内容,竟是恼人的压缩后代码(不换行),如下图所示-- 它的可读性很差,所以写了下面这个简单的程序,实现自动换行. 适用条件:遇到指定字符换行(本例中遇到'}'换 ...

  5. SQL AlawaysOn 之三:SQL服务器加入域

    声明:由于第一篇,配置域服务器,用的是别人的图,所以那个IP并不是我的. 至此为止,我的域控制器IP为192.168.8.230 域名为:dataserver.com 约定的SQL1  IP为192. ...

  6. CDMA sid, nid, bid 含义解释

    copyright@ celldb.cc SID 是系统识别码,每个地级市只有一个sid,是唯一的. NID是网络识别码,由各本地网管理,也就是由地级分公司分配.每个地级市可能有1到3个nid. BI ...

  7. Rsync的工作方式

    Rsync的工作方式(来自网络) 1)拷贝本地文件: 当SRC和DES路径信息中不包含冒号":"分隔符时,就启用这种工作模式: [root@cmmailapp1 /]# rsync ...

  8. python如何保证输入键入数字

    要求:python写一个要求用户输入数字,如果不是数字就一直循环要求输入,直到输入数字为止的代码 错误打开方式: while True: ten=input('Enter a number:') if ...

  9. 第六章:3D向量类

    第一节:类接口的设计 1.好的类在设计之前首先要回答下列问题:“这些类将包含哪些数据?”,“这个类将提供什么样的操作?”,“在哪些数据上执行操作?”. 我们已经知道我们要设计的是3D向量类,用来存储x ...

  10. Spark处理日志文件常见操作

    spark有自己的集群计算技术,扩展了hadoop mr模型用于高效计算,包括交互式查询和 流计算.主要的特性就是内存的集群计算提升计算速度.在实际运用过程中也当然少不了对一些数据集的操作.下面将通过 ...