package example;
//在子类构造对象时,访问子类构造函数时候,父类也运行。
//原因是:在子类的构造函数中第一行有一个默认的隐式语句super();
/*
 构造函数不能覆盖
 子类的实例化过程:子类中所有的构造函数默认都不能访问父类中空参数的构造函数。
 通过super();来调用。

为什么子类实例化的时候要访问父类中的构造函数呢?

是因为子类继承了父类,获取到了父类中的内容(属性),所以在使用父类内容之前,

要先看父类是如何对自己的内容进行初始化的。

所以子类在构造对象时,必须访问父类中的构造函数。

为了完成这个必须的动作,就在子类的构造函数中加入了super();语句。

如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用

父类中的哪个构造函数。

注意:super();语句必须要定义在子类构造函数的第一行。因为父类的初始化动作

要先完成。
 */
class Fu{
 Fu(int x){
  System.out.println("fu run");
 }
}
class Zi extends Fu{
 Zi(){
  super(4);//调用的就是父类中的空参数的构造函数
  System.out.println("zi run");
 }
}
public class ExtendsDemo {
 public static void main(String[] args) {
  new Zi();
 }
}

class Fu{
 Fu(){
  System.out.println("A fu run");
 }
 Fu(int x){
  System.out.println("B fu run"+x);
 }
}
class Zi extends Fu{
 Zi(){
  super();//调用的就是父类中的空参数的构造函数
  System.out.println("Z zi run");
 }
 Zi(int x){
    super(); //输出的是A和D
  System.out.println("D Zi run"+x);
 }
}
public class ExtendsDemo {
 public static void main(String[] args) {
  new Zi(6);
 }
}

class Fu{
 Fu(){
  System.out.println("A fu run");
 }
 Fu(int x){
  System.out.println("B fu run"+x);
 }
}
class Zi extends Fu{
 Zi(){
  super();//调用的就是父类中的空参数的构造函数
  System.out.println("Z zi run");
 }
 Zi(int x){
  //super();
    super(x);//输出的是B和D
  System.out.println("D Zi run"+x);
 }
}
public class ExtendsDemo {
 public static void main(String[] args) {
  new Zi(6);
 }
}

super在构造函数中的运用的更多相关文章

  1. 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释

    我想这应该是Java构造函数的一种机制吧,首先以子类和父类为例.当你创建一个子类的实例时,首先会调用父类的构造函数,然后再调用子类的构造函数,如果父类中没有缺省构造函数,则必须再子类的构造函数中显示的 ...

  2. 构造函数中的super和this的使用

    super用于调用父类构造函数的部分,其必须出现在构造函数的第一行.super在调用时第一件事就是去执行父类构造函数的部分,所执行的父类构造函数与super()括号中的参数相对应. this用于在一个 ...

  3. 关于构造函数中的this()和super()

    今天看到一个这段代码 public DataSourcePool(String driver, String url, String user, String pwd) throws Exceptio ...

  4. Android中自定义样式与View的构造函数中的第三个参数defStyle的意义

    零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第 ...

  5. 尝试解决在构造函数中同步调用Dns.GetHostAddressesAsync()引起的线程死锁

    (最终采用的是方法4) 问题详情见:.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长 看看在 Linux 与 Windows 上发生线程死锁的后果. Linux: Microsoft ...

  6. C++构造函数中不能调用虚函数

    在构造函数中调用虚函数,并不会产生多态的效果,就跟普通函数一样. c++ primer 第四版中497页15.4.5构造函数和析构中的虚函数讲到,如果在构造函数或析构函数中调用虚函数,则运行的是为构造 ...

  7. 关于在C#中构造函数中调用虚函数的问题

    在C#中如果存在类的继承关系,应避免在构造函数中调用虚函数.这是由于C#的运行机制造成的,原因如下: 新建一个类实例时,C#会先初始化该类(对类变量赋值,并将函数记在函数表中),然后再初始化父类.构造 ...

  8. 创建 PDO 实例并在构造函数中设置错误模式

    PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象.如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 ...

  9. C++中默认构造函数中数据成员的初始化

    构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据 ...

随机推荐

  1. TaintDroid:智能手机监控实时隐私信息流跟踪系统(三)

    4.3   原生代码标记传播 Native 代码是不受TaintDroid监控的.理想情况下,我们获得了相同的传播语义当使用相同的解释副本时.因此,为了精确的在Java层进行污点监控,我们定义了两个必 ...

  2. c++课程设计之通讯录电话簿管理设计

    功能 本程序是利用c++实现一个简单的电话簿管理.我是在Linux下利用g++直接编译的,完全可以将文件在VC中编译执行.源程序如有需要自行下载,点此下载,下载程序编译执行 程序执行效果如下; 1.新 ...

  3. mysqldump备份错误:诡异的#mysql50#.mozilla数据库

    今天测试mysql自动备份功能 在red_hat_linux5系统下安装了mysql_5.5 系统提示执行脚本抛错, 手动执行脚本, 返回错误:mysqldump: Got error: 1102: ...

  4. 数据库(MySQL)表基本操作

                                    数据库表基本操作 思前想后,最终还是把博客的名字改成了数据库表基本操作,以前叫SQL语句大全,感觉用"大全"这个名词 ...

  5. .Net多线程编程—同步机制

    1.简介 新的轻量级同步原语:Barrier,CountdownEvent,ManualResetEventSlim,SemaphoreSlim,SpinLock,SpinWait.轻量级同步原语只能 ...

  6. python基础4

    内容概要: 一.递归 递归就是函数本身调用自己,直到满足指定条件之后一层层退出函数 递归特性: 必须有一个明确的结束条件 每次进入更深一层递归时,问题规模相比上次递归都应有所减少 递归效率不高,递归层 ...

  7. 队列Queue FIFO先进先出 栈Stack FILO先进后出

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. jQuery 怎么实现文字显示2s,消失0.5s,再显示2s,再消失0.5s,以此循环

    <div style="display: none;" id='divTestDisplay'>我要显示的文字</div> window.onload = ...

  9. 妙味H5交互篇备忘

      document.addEventListener( 'touchstart', function(e){ e.preventDefault(); } ); 在document上增加touchst ...

  10. 觉得VR头显太笨重?轻便的VR“神器”来了

    一直以来需要搭配手机才能使用的VRBOX(VR眼镜盒子)都被大家诟病携带不便.比较笨重.不透气等等问题.大家也一直期待能够有轻便的搭配手机的VR设备出现,最好是可以随身携带的.另外一方面,作为手机最常 ...