加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

当子类没有在Java中定义构造函数时会发生什么?

发布时间:2020-12-14 05:16:52 所属栏目:Java 来源:网络整理
导读:我有几个我想知道的情况.首先,如果你没有构造函数: class NoCons { int x; } 当我做新的NoCons()时,默认构造函数被调用.它究竟做了什么?它将x设置为0,否则会在其他地方发生? 如果我有这种情况怎么办? class NoCons2 extends NoCons { int y; } 当我打电
我有几个我想知道的情况.首先,如果你没有构造函数:
class NoCons { int x; }

当我做新的NoCons()时,默认构造函数被调用.它究竟做了什么?它将x设置为0,否则会在其他地方发生?

如果我有这种情况怎么办?

class NoCons2 extends NoCons { int y; }

当我打电话给新的NoCons2()时会发生什么? NoCons的默认构造函数被调用,然后NoCons2的构造函数?它们各自将各自的x和y字段设置为0吗?

这个版本呢

class Cons2 extends NoCons { int y; public Cons2() {} }

现在我有一个构造函数,但它不调用超类的构造函数. x如何初始化?如果我有这种情况怎么办?

class Cons { int x; public Cons() {} }
class NoCons2 extends Cons { int y;  }

将会调用该缺点构造函数吗?

我可以尝试所有这些例子,但是我不知道什么时候运行默认构造函数.想想这个的一般方法是什么,以便我知道将来会发生什么情况?

解决方法

当Java类没有明确定义构造函数时,添加了一个public no-args默认构造函数:
class Cons { int x; }

相当于:

class Cons { int x; public Cons() {} }

一个子类的构造函数没有显式定义它调用的父类的构造函数,它会在父类之前自动调用父类的默认构造函数.所以假设:

class A { public A() { System.out.println("A"); } }

那么这个:

class B extends A { public B() { System.out.println("B"); } }

完全相当于:

class B extends A { public B() { super(); System.out.println("B"); } }

并且在这两种情况下的输出将是:

A
B

所以当你做:

new NoCons2();

订单是:

> NoCons的默认构造函数调用,虽然这在技术上是(2)的第一部分;接着> NoCons2的默认构造函数调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读