当子类没有在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的默认构造函数调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |