学习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相关推荐

  1. java 继承 子类 实例化_关于Java继承中父类和子类构造函数的问题

    Java子类在实例化时默认调用的是父类的无参构造函数,不论实例化时调用的是子类的有参还是无参构造函数, 1.当父类没有显式定义构造方法时, 编辑器会默认为此类添加一个隐式无参构造函数.此时子类可以有自 ...

  2. python 多继承与super使用详解_继承中的MRO与super详解

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

  3. Java继承中的子类父类构造方法的调用

    Java的继承中,关于子类和父类构造方法的使用. 子类在初始化时,一定会调用父类的构造方法. 原因如下: 在子类继承父类时,子类会继承父类所有的公共成员变量,公共方法,这些方法在子类中不再重复声明. ...

  4. java继承中构造方法_java之继承中构造方法总结(文字版)

    子父类中的构造方法的特点 1. 在子类构造对象时,发现访问子类构造方法时,父类也运行了.为什么呢? 答:因为,在子类构造方法中第一行有一个默认的隐式语句:super(); 子类的实例化过程:子类中所有 ...

  5. Java继承中成员变量和成员函数的覆盖

    2019独角兽企业重金招聘Python工程师标准>>> 关于继承中变量和方法的覆盖: 1, 与基类中同名的变量,会被派生类所覆盖(同时存在但是有独立的值),直接取值将是派生类的值,但 ...

  6. java可以继承私有的,在java继承中,私有属性能否被继承

    其实在继承中,子类可以继承父类的私有属性的内容空间,但是不能继承父类私有属性的访问权限,下面看代码 父类Animal public class Animal { private String name ...

  7. Java泛型中extends T和super T的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  8. java继承中的一些该注意的问题

    关于继承,我想大多数人都知道,它是面向对象语言中的三大特性之一,所以在这里,关于继承的概念等我就不做详细介绍了,我主要就讲一下大家对他的认识中一些比较容易犯的错误吧.   错误认识1.继承,是将父类中 ...

  9. java继承的关键字_超级关键字在Java继承中的作用

    可以使用Java中的super关键字来引用父类对象.它通常在继承的上下文中使用.给出了一个用Java演示super关键字的程序,如下所示: 示例class A { int a; A(int x) { ...

最新文章

  1. python爬虫经典教程-python爬虫经典例子有哪些
  2. ETL工具 kettle问题
  3. netty系列之:从零到壹,搭建一个SOCKS代理服务器
  4. $.post请求的参数在后台代码中得到为null_vue中Axios的封装和API接口的管理
  5. 技术论坛 | CCF YOCSEF上海即将在 CNCC 举办“知识图谱遇见社交媒体”专题论坛
  6. form表单中根据值判断是否disabled_Java 0基础入门 (Html表单、表单元素)
  7. MySQL安全***实战指南之体系结构篇
  8. 检查数组中的子字符串– Java,Python和Swift
  9. Cesium源码剖析---Post Processing之物体描边(Silhouette)
  10. python中mid_Python生成音乐 之 mido库读取midi文件
  11. C++第三方库HPSocket数据的发送与接收
  12. win10初始化mysql出现失败怎么办_win10初始化电脑出现问题未进行任何更改怎么办...
  13. 从“Liskov替换原则”和“Refused Bequest”看“正方形为什么不能继承长方形”
  14. 【散文】 漫步在春天
  15. C51单片机实现 贪吃蛇
  16. git提交提示workspace.xml出现conflicted
  17. Elastic认证特训营 难点解读04——集群问题排查实战指南
  18. textfield监听输入汉字数量
  19. java 多线程垃圾回收_Java 垃圾回收
  20. 【思考】开学第一课--大学的终结,终生学习

热门文章

  1. Entity Framework在三层架构中的使用
  2. 后台向前台js传递参数
  3. CV《物体识别与检测4 - 人脸验证》
  4. php环境模拟stphp_用php模拟做服务端侦听端口
  5. 数学物理方法pdf_中考状元笔记九科(语文+数学+物理+化学+英语+历史+地理+政治+生物)(高清PDF);...
  6. LSTM模型结合LDA对序列性文本建模 阅读笔记 2017 ICML
  7. Apache PDFbox快速开发指南
  8. 图的单源最短路径(Dijkstra算法)
  9. 设计模式学习笔记——代理(Proxy)模式
  10. vm的红帽linux怎样安装教程,vmware10怎么安装linux_redhat7系统安装教程