开课吧课堂之何时调用构造函数
类层次结构创建以后,组成层次结构的类的构造函数以怎样的顺序被调用?举个例子来说,给定一个名为B的子类和超类A,是A的构造函数在B的构造函数之前调用,还是情况相反?回答是在类层次结构中,构造函数以派生的次序调用,从超类到子类。
而且,尽管super( )必须是子类构造函数的第一个执行语句,无论你用到了super( )没有,这个次序不变。如果super( )没有被用到,每个超类的默认的或无参数的构造函数将执行。下面的例子阐述了何时执行构造函数:
// Demonstrate when constructors are called.
// Create a super class.
class A { A() { System.out.println("Inside A's constructor."); }
}
// Create a subclass by extending class A.
class B extends A { B() { System.out.println("Inside B's constructor."); }
}
// Create another subclass by extending B.
class C extends B { C() { System.out.println("Inside C's constructor."); }
}
class CallingCons { public static void main(String args[]) { C c = new C(); }
}
该程序输出如下:
Inside A’s constructor
Inside B’s constructor
Inside C’s constructor
如你所见,构造函数以派生的顺序被调用。
仔细考虑,构造函数以派生的顺序执行是很有意义的。因为超类不知道任何子类的信息,任何它需要完成的初始化是与子类的初始化分离的,而且它可能是完成子类初始化的先决条件。因此,它必须最先执行。
开课吧课堂之何时调用构造函数相关推荐
- 计算机公开课课前互动小游戏,公开课前课堂小游戏
引导语:一年级拼音教学小游戏玩是孩子的天性,游戏自然就会成为一年级拼音教学的常客!下面是yjbys小编收集了一些关于公开课前拼音课堂小游戏,希望对你有帮助. 篇一:公开课前课堂小游戏 适用范围: 用于 ...
- C++在构造函数中调用构造函数
为什么80%的码农都做不了架构师?>>> C++如何在一个构造函数中调用另一个构造函数,在一篇博文中看到了这样的一道题: #include <stdlib.h> # ...
- android+jni+构造函数,在JNI中调用构造函数失败Android
我想从我的JNI Android代码调用构造函数;但不知何故,它失败,以下例外.. 我相信我失去了一些非常小的东西;但我无法弄清楚......任何人都可以请指出?在JNI中调用构造函数失败Androi ...
- 构造函数中调用构造函数new和delete使用小结
malloc free 是C语言的函数 new delete 是C++的操作符 #include "iostream" using namespace std;//构造中调用构造是 ...
- C++分析使用拷贝控制成员和调用构造函数的时机
我们来分析下面这段代码: #include <iostream> #include <vector>using namespace std;struct X {X() {cou ...
- 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数...
不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...
- 使用类名称创建实例并调用构造函数
本文翻译自:Creating an instance using the class name and calling constructor Is there a way to create an ...
- 何时调用构造函数和析构函数
何时调用构造函数和析构函数 构造函数的作用是保证每个对象的数据成员都有何时的初始值. 析构函数的作用是回收内存和资源,通常用于释放在构造函数或对象生命期内获取的资源. 一般我们都知道构造和析构的次序: ...
- C++调用构造函数的方式
class A { public:A(int a){} }; class B : public A {};int main() {B b(); } 编译器在自动合成构造函数的时候,会调用子类的默认构造 ...
最新文章
- 刚刚、几秒前,时间格式化函数
- Linux010 Miniconda安装及使用
- ORM对mysql数据库中数据进行操作报错解决
- ai的预览模式切换_AI字体制作,用AI制作创意阶梯式文字
- 在多重Catch的情况下得到异常的完整信息
- java提升权限运行_提升代码的运行权限,实现模拟管理员身份的功能
- VINS-Mono代码分析与总结(完整版)
- android渐变效果
- 网络爬虫随记:2018-03-12启(refreshing)
- Atitit php pdo的api使用 目录 1.1. PHP PDO简介	1 1.2. 若要使用数据库长连接,:PDO::ATTR_PERSISTENT	1 2. 其他设置	2 2.1. )、P
- Visual Studio + VAssistX常用快捷键收藏
- 基于JAVA疫情防控期间网上教学管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- [产品设计]如何绘制业务流程图(下)
- 【解决】linux磁盘扩容大全:新增磁盘、原磁盘扩容、home分区root分区扩容
- 闲置路由器做无线打印服务器
- 微信小程序 - 获取汉字拼音首字母(汉字英文首字母)
- muduo网络库:05---线程同步精要之(线程安全的Singleton实现)
- HighNewTech:人类发布史上首张黑洞照片—1+17张高清图片讲解黑洞简史
- JAVA生成PDF标点符号不换行_iText生成中文PDF行首标点处理
- 什么是催眠?人机融合智能可以催眠吗?