子类对象初始化过程中构造函数调用的若干规则

9. 对象的初始化和清理 (构造函数与析构函数) 对象的初始化和清理 (构造函数与析构函数) 阅读详情

1.如果父类中没有构造函数,即使用默认的构造函数,那子类的构造函数会自动调用父类的构造函数

class Father
{
	private int a,b;
	void show()
	{
		System.out.println(a);
	}
}

class Son extends Father
{
	private int c,d;
	Son(int c, int d)
	{
		this.c = c;
		this.d = d;   
	}
}

public class ConstructionTest
{
	public static void main(String args[])
	{
		Son s = new Son(2, 3);
		s.show();
	}
}
输出结果0,说明子类的构造函数自动调用父类的无参构造函数,初始化父类的成员为0

2.如果父类中定义了无参构造函数,子类的构造函数会自动调用父类的构造函数
class Father
{
	private int a,b;
	Father(){System.out.println("father done");}
	void show()
	{
		System.out.println(a);
	}
}

class Son extends Father
{
	private int c,d;
	Son(int c, int d)
	{
		this.c = c;
		this.d = d;   
	}
}

public class ConstructionTest
{
	public static void main(String args[])
	{
		Son s = new Son(2, 3);
		s.show();
	}
}
输出结果:father done
  0
说明重写了默认的无参构造函数,子类自动调用这个函数,父类的成员还是被初始化为0.

3. 如果定义了有参构造函数,则不会有默认无参构造函数,这样的话子类在调用父类的午餐构造函数的时候会出错(没有用super调用父类有参构造函数的情况下)
//import java.io.*;

class Father
{
	private int a,b;
	Father(int a, int b){this.a = a; this.b = b;}
	void show()
	{
		System.out.println(a);
	}
}

class Son extends Father
{
	private int c,d;
	Son(int c, int d)
	{
		this.c = c;
		this.d = d;   
	}
}

public class ConstructionTest
{
	public static void main(String args[])
	{
		Son s = new Son(2, 3);
		s.show();
	}
}

输出结果:
Exception in thread "main" java.lang.NoSuchMethodError: Father: method <init>()V
not found
  at Son. <init>(Son.java:5)
  at ConstructionTest.main(ConstructionTest.java:6)
如何初始化对象——浅谈构造函数 前言: 在一开始学习C语言时,老师就叮嘱过使用变量时,一定要记得初始化,不然会出现奇奇怪怪的值,比如字符串没有初始化,会输出内存中本来的字符,直到遇到 ‘\0’。 同样的类也是一种数据类型,所以我们也需要对对象进行初始化。在visual studio的debug模式中,会向没有初始化的变量填充0xcc,而两个0xcc连在一起就是国标中的烫,这就是有时候程序输出烫烫烫的原因。 下面进入正文 C++使... 阅读详情

相关推荐

生信入门(六)——单细胞分析(Seurat)

生信入门(六)——单细胞分析(Seurat) 文章目录生信入门(六)——单细胞分析(Seurat)一、数据导入1、数据来源2、数据导入二、标准预处理1、QC和选择细胞进行进一步分析2、规范化数据3、识别高度可变的特征(特征选择)4、缩放数据三、主成分分析(PCA)1、线性降维2、确定数据集的“维度”四、聚类细胞五、非线性降维(UMAP/tSNE)六、寻找差异表达的特征(簇生物标志物) 一、数据导入 1、数据来源 点击此处下载数据 数据说明:分析10X Genomics提供的外周血单细胞(PBMC)数据集,有

羊羊的博客 6万+

Cpp真经3--子类与父类的构造函数关系

子类可以继承父类所有的成员但是子类无法继承父类的构造函数,因为子类需要从父类中继承所以必须先调用子类的构造函数。 如果子类没有定义构造函数,则默认调用父类的构造函数 如果子类定义了构造函数,不管是有参数还是无参数的,会先调用父类的无参构造函数,再去调用自己的构造函数。 也就是说如果子类没有显式的调用父类的构造函数,则会默认地调用父类无参的构造函数。 如果父类只提供了有参数构造函数,那子类在继承时必须要显式调用这个有参数构造函数 对于析构,和构造一样子类在析构时也会调用父类的析构函数,不过顺序相反,先调用子类

weixin_43604927的博客 723

内网(极空间)搭建gitlab跳板机转发端口及域名配置

然后,回头尝试用内网地址+15022 clone,成功,用公网的ip+15222 clone失败,那就是定位到时nginx转发的问题了。首先想到的就是 git clone是通过ssh的22端口进行下载的,那就需要打通22端口,则又配置22端口的nginx转发。然后,我通过ssh命令,做一个端口转发,以实现内网穿透,将服务端口链接到跳板机上。然后穿透到阿里云服务器跳板机的端口,只能内网访问,需要用nginx做个转发,才能用公网ip进行访问。然后,如上,我的80端口,映射15080,22端口映射15022。

God丶Davide的博客 6075

C++复习

在公有派生的情况下,有以下三条赋值兼容规则(是指在需要基类对象的任何地方,都可以使用 公有派生类的对象 来替代)。C++中建立派生类对象时构造函数的调用顺序派生类构造函数的定义中可以省略对基类构造函数的调用,其条件是基类中必须有默认的构造函数或者根本就没有定义构造函数。派生类析构函数的定义与基类无关,与没有继承关系的类中的析构函数的定义完全相同。它只负责新增成员的清理工作,系统会自己调用基类及成员对象的析构函数进行相应的清理工作。 抽象类的规定派生类对象和基类对象的关系:.................

qq_61275084的博客 2102

宇树机器人G1二次开发:语音对话、打断与激活功能实现指南

宇树机器人G1是一款功能强大的四足机器人,其开放的SDK和API为开发者提供了广阔的二次开发空间。其中,语音交互是提升机器人智能化水平和用户体验的关键功能。本文将详细介绍如何在宇树机器人G1上进行二次开发,实现。语音打断允许用户在机器人说话时随时中断并输入新指令,这是提升交互自然度的关键功能。三大核心功能,帮助你构建更自然、更智能的人机交互系统。语音识别是将用户的语音输入转换为文本的过程。识别文本后,需要理解用户意图并生成回复。将文本回复转换为语音输出。

m0_52645558的博客 664

在UI界面中播放视频_unity基础开发教程

之前我写过一篇在场景中播放视频的文章,但是在开发中有时候也会在UI的界面中播放视频,这期我们做一下在UI的界面中播放视频。操作步骤比较简单,到这里就完成了,如果有问题的话可以在评论区留言,下期见,拜拜!

为者常成,行者常至! 2011

MATLAB报错:CLASS 函数必须从类构造函数内调用

使用function创建MATLAB类时报错:CLASS 函数必须从类构造函数内调用。 一个可能的原因是因为MATLAB里创建的类.m文件需要放入一个文件夹里,文件夹名称需要和类名一致,并且需要在前面添加'@'符号,这样MATLAB就可以识别这个类,并进行调用。

lzh_1998的博客 2300

Kettle入门指南:从安装到数据转换实战

本文提供Kettle(Pentaho Data Integration)的完整入门指南,涵盖从Java环境安装、软件配置到核心概念(转换与作业)的详细解析。通过实战案例,手把手教你如何将文本文件数据导出到Excel,并连接MySQL数据库进行数据导入,帮助你快速掌握这一强大ETL工具的基本使用,实现高效数据搬运与转换。

weixin_29266647的博客 449

构造函数调用规则

默认情况下,C++编译器至少给类添加3个函数 1、默认构造函数(无参,函数体 为空); 2、默认析构函数(无参,函数体 为空); 3、默认拷贝构造函数,对属性进行值拷贝。 构造函数调用规则如下: 1、如果用户定义有参构造函数,C++不再提供默认无参构造函数,但会提供默认拷贝构造函数; 2、如果用户定义拷贝构造函数,C++不会再提供其他构造函数。

java领域博主 4804

第五天 Labview数据记录(5.4 EXCEL文件读写)

Excel 文件读写在数据处理、自动化办公、数据分析等领域具有重要的意义。以下是 Excel 文件读写的主要应用场景和意义:1. 数据管理和整理;2. 自动化办公;3. 数据分析和可视化;4. 系统集成;5. 报表生成;6. 教育和培训;7. 实际应用场景。Excel 文件读写的意义在于提高数据处理的效率、减少人工操作、支持自动化办公、促进数据分析和可视化,以及实现系统之间的数据交互。无论是企业、组织还是个人,都可以通过 Excel 文件读写实现数据的高效管理和利用。

weixin_38637405的博客 1263

外骨骼机器人(五):步态分析之正常步态

研究病理步态之前,需要了解正常步态,作为判断标准。但是需要记住两个问题:1.“正常”因人而异,性别、年龄、身体情况都需要考虑在内,因此,需要对不同的个体选择合适的正常标准;2.即使病人的步态与正常步态有某种不同,这也不能说明这是不可取的,也不能说明应该把它变成“正常”步态。许多步态异常是对病人的一些问题的一种补偿,尽管异常,但它们仍然是有用的。步态周期的定义是连续为两次发生重复行走事件之间的时间间隔。尽管可以选择任何事件来定义步态周期,但通常使用一只脚接触地面的瞬间(“初始接触”)是方便的。

行者无疆的博客 1995

构造函数和class

class的基本格式 constructor放属性 ,后面放方法 // class和构造函数本质是相同的 class People{ constructor(name,age){ this.name=name; this.age=age; } //类的方法要写constructor的外面,各个实例共享方法,存储的位置相同 //书写要求,各个方法之间不用任何符号

weixin_46273011的博客 459

ArcGIS JSAPI 高级教程 - 添加多个 box 立方体 - 通过顶点、索引、UV 自定义每个 box、每个面不同颜色

ArcGIS JSAPI 高级教程 - 添加多个 box 立方体 - 通过顶点、索引、UV 自定义每个 box、每个面不同颜色。

非科班Java出身GISer的博客 401

Java 子类构造函数默认调用父类构造函数super

一、继承中的构造方法的执行顺序 创建对象时,会先自动调用父类的构造函数,再自动调用子类的构造函数。 解释:super()表示父类的构造函数并会调用于参数相对应的父类中的构造函数。子类中,它在调用父类中空参数的构造函数。因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。因此子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。 二、子类的所有构造函数中的第一行,其实都有一条隐身的语句super(); 1、父类有空参:没有有参构造时系统默认给出了,或.

jb_home的博客 9935

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++学习之路-构造函数的初始化列表

初始化列表何为初始化列表初始化列表的本质初始化列表的优势初始化列表中列表顺序问题初始化列表与默认参数的配合使用初始化列表的注意之处构造函数的声明和实现分离时,初始化列表需写在实现里子类调用父类的构造函数初始化列表总结 何为初始化列表 定义:一种便捷的初始化类内成员变量的方式。 初始化成员变量通常在构造函数里执行,如下例所示。成员变量的初始化可以通过调用有参的构造函数进行传参初始化,也可以通过调用无参的构造函数在函数体内部直接初始化(可以看我之前的博文)。下例展示了调用有参的构造函数始化成员变量的方式。

weixin_45452278的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C++子类初始化父类的构造函数调用总结

我们知道,构造方法是用来初始化类对象的。如果在类中没有显式地声明构造函数,那么编译器会自动创建一个默认的构造函数;并且这个默认的构造函数仅仅在没有显式地声明构造函数的情况下才会被创建。 构造函数与父类的其它成员(成员变量和成员方法)不同,它不能被子类继承。因此,在创建子类对象时,为了初始化从父类中继承来的成员变量,编译器需要调用其父类的构造函数。如果子类的构造函数没有显示地调用父类的构造函数...

yzcwansui的博客 1460

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c++ 子类构造函数初始化及父类构造初始化

  我们知道,构造方法是用来初始化类对象的。如果在类中没有显式地声明构造函数,那么编译器会自动创建一个默认的构造函数;并且这个默认的构造函数仅仅在没有显式地声明构造函数的情况下才会被创建创建。   构造函数与父类的其它成员(成员变量和成员方法)不同,它不能被子类继承。因此,在创建子类对象时,为了初始化从父类中继承来的成员变量,编译器需要调用其父类的构造函数。如果子类的构造函数没有显示地调用父类的...

weixin_30619101的博客 1082

C++必看:C++构造函数的初始化顺序

本文总结了C++继承体系中构造函数和虚函数的调用规则:1)构造函数调用顺序为:虚基类→非虚基类(按声明顺序)→成员对象(按声明顺序)→派生类自身;2)构造函数中的虚函数调用静态绑定到当前类;3)拷贝构造函数在对象初始化而非赋值时调用;4)子类虚函数声明不影响父类静态绑定,仅对后续继承有效,多态性需从基类开始启用。文中通过代码示例演示了这些规则的具体表现,包括虚函数表切换时机和虚函数绑定机制。

Andytoe的博客 3021

为什么在创建子类对象的时候会调用父类的构造函数

原文:Constructors of Sub and Super Class in Java? 1.为什么在创建子类对象的时候会调用父类的构造函数? public class Sub extends Super{ public Sub() { System.out.println("Sub"); } public static void main(...

不务正业的野猴子 2万+

【面向对象-06】对象初始化过程、对象调用成员过程

目录 一、对象初始化过程 1、示例代码 2、分析 3、总结 二、对象调用成员的过程 1、代码示例 2、分析 3、总结 一、对象初始化过程 1、示例代码 给出如下代码,请问一共有几条打印语句,分别是什么? public class ObjectInitialization { public static void main(String[] args) { Perso...

百里慕溪 4359

qt 子类调用父类的函数_在C++中子类继承和调用父类的构造函数方法

构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。构造原则如下:1.如果子类没有定义构造方法,则调用父类的无参...

weixin_39833469的博客 1692

关于组合类中构造函数调用的分析

关于组合类中构造函数调用的分析 组合类相关的概念 一种包含与被包含的关系。 例如,用一个类来描述计算机系统.首先可以把它分解为硬件和软件 硬件包含中央处理单元(CPU)存储器、输入设备和输出设备,软件可以包括系统软件和应用软件。这些部分每一个都可以进一步分解,用类的观点来描述,它就是一个类的组合。 组合的概念 类成员是另一个类对象 可以在已有抽象的基础上实现更复杂的抽象 组合类的构造函数 不仅要负...

小哨的博客 3215

Java:简述父类与子类构造函数的调用次序

Java:简述父类与子类构造函数的调用次序 一、题目: 下列代码在执行new Child(“test”)的时候,输出结果是什么呢? class People { String name; public People() { System.out.println(1); } public People(String name) { System.out.println(2)...

王小二(海阔天空) 2399

JVM之父类子类初始化过程以及类加载过程

父类子类初始化过程 父类中有无参构造函数,子类构造函数默认调用super(),子类构造函数中可以不写super();若父类中只有有参构造函数,子类中必须在第一行调用super(参数); 如果没有任何构造函数,系统会默认有一个无参构造函数。 初始化过程: 1.初始化父类中的静态成员变量和静态代码块 (先声明的先执行); 2.初始化子类中的静态成员变量和静态代码块(先声明的先执行); 3.初始化父类的普通成员变量和构造代码块(先声明的先执行) ,再执行父类的构造方法; 4.初始化子类的普通成员变量和构造代码块(

zikai_liang的博客 967

父类构造函数与子类构造函数之间的关系

关于父类构造函数与子类构造函数之间的区别? 为了说清楚父类构造函数、子类构造函数,我们先看一个例子:请指出下面程序中的错误: class Base { private: int baseVar; public: Base(int var) { baseVar = var; } }; class Derived :public Base { private: int de...

lyl194458的博客 1468
上一篇: 子类对象初始化顺序
下一篇: Linux 多线程函数解析
KeithCollens
博客等级 码龄15年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值