我有几个我想知道的情况.首先,如果你没有构造函数:
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();
订单是: