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

前端之家收集整理的这篇文章主要介绍了当子类没有在Java中定义构造函数时会发生什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有几个我想知道的情况.首先,如果你没有构造函数
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的默认构造函数调用.

猜你在找的Java相关文章