JAVA 继承中的this和super

时间:2021-11-08 05:38:52

学习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继承中的转型及其内存分配

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

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

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

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

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

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

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

  9. Java继承中构造器的调用原理

    Java的继承是比较重要的特性,也是比较容易出错的地方,下面这个例子将展示如果父类构造器中调用被子类重写的方法时会出现的情况: 首先是父类: public class test { void fun( ...

随机推荐

  1. CSS关于子元素设置了float属性后父元素高度为0的解释和解决方法

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. 如何让IE8的菜单栏调到最上方

    如何让IE8的菜单栏调到最上方 运行gpedit.msc,在"用户配置"/"管理模板"/"Windows Components"/&quot ...

  3. phpStorm无法使用svn1&period;8的解决办法

    1.安装SVN的Command Lines Tools. 2.在phpStorm的SVN属性中,将Use Command Line Client填入:C:\Program Files\Tortoise ...

  4. Linux Rootkit Sample &amp&semi;&amp&semi; Rootkit Defenser Analysis

    目录 . 引言 . LRK5 Rootkit . knark Rootkit . Suckit(super user control kit) . adore-ng . WNPS . Sample R ...

  5. &lbrack;Java&rsqb; SSH框架笔记&lowbar;Struts2配置问题

    1.Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar:file:/D:/Progr ...

  6. 无废话网页重构系列——(6)HTML主干结构:站点&lpar;site&rpar;、页面&lpar;page&rpar;

    本文作者:大象本文地址:http://www.cnblogs.com/daxiang/p/4653546.html 在分析和切出设计稿,以及部署项目目录文件后,开始写HTML Demo. 首先,弄出H ...

  7. 套题T2

    数学(math.cpp) DXY的数学很差... 对于所有1<=i<=N求(2^i – i^2)能被7整除的个数.(N<=1000000) 样例输入: 3 样例输出: 1 你在代码中 ...

  8. Django之缓存、信号和图片验证码

    一. 缓存 1. 介绍 缓存通俗来说:就是把数据先保存在某个地方,下次再读取的时候不用再去原位置读取,让访问速度更快. 缓存机制图解 2.Django中提供了6种缓存方式 1. 开发调试 2. 内存 ...

  9. Logger&period;error方法之打印错误异常的详细堆栈信息

    一.问题场景 使用Logger.error方法时只能打印出异常类型,无法打印出详细的堆栈信息,使得定位问题变得困难和不方便. 二.先放出结论 Logger类下有多个不同的error方法,根据传入参数的 ...

  10. 快讯:微软安卓版个人助理(Cortana)在美国境内进行公測

    8月24日,"Microsoft starts public test of Cortana app for Android smartphones"(此文8月24日发表),此事意 ...