为什么我的超类的字段在这里被初始化?

时间:2012-08-07 21:01:08

标签: java

我希望有人来验证我的理解是否正确。 我有一些像这样的代码:

public class A {
int a;
int b;
public A(int a)
{
    this.a=a;
}

现在A()是我定义的构造函数,这意味着它不是默认的构造函数。 所以,如果我有一个扩展这个类的子类。

public class B extends A{
public B()
{ 
   super(15);
}

}

如果我在子类中打印a和b的值,我看到a的值为15,b的值为0.当我在A中明确定义了一个构造函数时,这意味着它不是默认的构造函数那么A类中未初始化的字段如何得到0的值?

4 个答案:

答案 0 :(得分:6)

int是原始类型,不能是null。默认值为0

答案 1 :(得分:0)

relevant part of the JLS表示如果未指定类字段,则会自动使用默认值 初始化

答案 2 :(得分:0)

在这种情况下,未初始化的字段b在java中获取int的默认值0。

http://docs.oracle.com/javase/specs/

答案 3 :(得分:0)

基本类型的默认值由Object类的构造函数设置。初始化B的对象时,它在这里被调用..

public A(int a)中的

super();首先自动执行,因此b0的{​​{1}}构造函数而获得Object在这里打电话。

来源:完整参考JAVA \ m /