类层次结构创建以后,组成层次结构的类的构造函数以怎样的顺序被调用?举个例子来说,给定一个名为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

如你所见,构造函数以派生的顺序被调用。

仔细考虑,构造函数以派生的顺序执行是很有意义的。因为超类不知道任何子类的信息,任何它需要完成的初始化是与子类的初始化分离的,而且它可能是完成子类初始化的先决条件。因此,它必须最先执行。

开课吧课堂之何时调用构造函数相关推荐

  1. 计算机公开课课前互动小游戏,公开课前课堂小游戏

    引导语:一年级拼音教学小游戏玩是孩子的天性,游戏自然就会成为一年级拼音教学的常客!下面是yjbys小编收集了一些关于公开课前拼音课堂小游戏,希望对你有帮助. 篇一:公开课前课堂小游戏 适用范围: 用于 ...

  2. C++在构造函数中调用构造函数

    为什么80%的码农都做不了架构师?>>>    C++如何在一个构造函数中调用另一个构造函数,在一篇博文中看到了这样的一道题: #include <stdlib.h> # ...

  3. android+jni+构造函数,在JNI中调用构造函数失败Android

    我想从我的JNI Android代码调用构造函数;但不知何故,它失败,以下例外.. 我相信我失去了一些非常小的东西;但我无法弄清楚......任何人都可以请指出?在JNI中调用构造函数失败Androi ...

  4. 构造函数中调用构造函数new和delete使用小结

    malloc free 是C语言的函数 new delete 是C++的操作符 #include "iostream" using namespace std;//构造中调用构造是 ...

  5. C++分析使用拷贝控制成员和调用构造函数的时机

    我们来分析下面这段代码: #include <iostream> #include <vector>using namespace std;struct X {X() {cou ...

  6. 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数...

    不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...

  7. 使用类名称创建实例并调用构造函数

    本文翻译自:Creating an instance using the class name and calling constructor Is there a way to create an ...

  8. 何时调用构造函数和析构函数

    何时调用构造函数和析构函数 构造函数的作用是保证每个对象的数据成员都有何时的初始值. 析构函数的作用是回收内存和资源,通常用于释放在构造函数或对象生命期内获取的资源. 一般我们都知道构造和析构的次序: ...

  9. C++调用构造函数的方式

    class A { public:A(int a){} }; class B : public A {};int main() {B b(); } 编译器在自动合成构造函数的时候,会调用子类的默认构造 ...

最新文章

  1. 刚刚、几秒前,时间格式化函数
  2. Linux010 Miniconda安装及使用
  3. ORM对mysql数据库中数据进行操作报错解决
  4. ai的预览模式切换_AI字体制作,用AI制作创意阶梯式文字
  5. 在多重Catch的情况下得到异常的完整信息
  6. java提升权限运行_提升代码的运行权限,实现模拟管理员身份的功能
  7. VINS-Mono代码分析与总结(完整版)
  8. android渐变效果
  9. 网络爬虫随记:2018-03-12启(refreshing)
  10. Atitit php pdo的api使用 目录 1.1. PHP PDO简介 1 1.2. 若要使用数据库长连接,:PDO::ATTR_PERSISTENT 1 2. 其他设置 2 2.1. )、P
  11. Visual Studio + VAssistX常用快捷键收藏
  12. 基于JAVA疫情防控期间网上教学管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  13. [产品设计]如何绘制业务流程图(下)
  14. 【解决】linux磁盘扩容大全:新增磁盘、原磁盘扩容、home分区root分区扩容
  15. 闲置路由器做无线打印服务器
  16. 微信小程序 - 获取汉字拼音首字母(汉字英文首字母)
  17. muduo网络库:05---线程同步精要之(线程安全的Singleton实现)
  18. HighNewTech:人类发布史上首张黑洞照片—1+17张高清图片讲解黑洞简史
  19. JAVA生成PDF标点符号不换行_iText生成中文PDF行首标点处理
  20. 什么是催眠?人机融合智能可以催眠吗?

热门文章

  1. IDEA创建xml文件
  2. 用框架名唬人谁都会,那你知道Web开发模式吗?——莫问前程莫装逼
  3. 浅入深出Vue:事件处理
  4. JavaSE 学习笔记之正则表达式(二十五)
  5. python3 验证用户名密码
  6. Oracle行转列、列转行的Sql语句总结
  7. Hibernate之ID生成规则
  8. ruby中数组的常用函数
  9. Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
  10. ios获取区域服务器信息,ios获取服务器数据