2015-08-16 60 views
2
class X { 
    int x1, x2, x3; 
} 

class Y extends X { 
    int y1; 

    Y() { 
     x1 = 1; 
     x2 = 2; 
     y1 = 10; 
    } 
} 

public class Test { 
    public static void main(String[] args) { 
     Y y = new Y(); 
     System.out.println(y.x1 + "," + y.x2 + "," + y.x3 + "," + y.y1); 
    } 
} 

哪个构造函数初始化变量x3?哪个构造函数初始化变量x3?

  1. 默认类的构造函数X
  2. 默认Object
+0

您怎么看?为什么? – Pshemo

+0

x3未实例化 –

+0

@AlexandruSeverin字段总是被初始化,但并非总是与默认值不同。 – Pshemo

回答

4

变量X3的构造函数永远不会被你的任何构造函数来设置。 (你的构造函数== Y())。它也不由对象构造函数设置,因为它看不到字段

它将在运行时被虚拟机设置为0。这种行为是通过这种方式来删除多余的init代码。 请参阅:http://www.javapractices.com/topic/TopicAction.do?Id=14

0

您将看到其默认值。

为Y延伸X,所以当你执行新Y(),最终会调用X的无参数的构造函数(即一个超类)。构造函数X在调用时会将类的状态初始化为默认值。