1 class Super
2 {
3 int i=0;
4 public Super(String a)
5 {
6 System.out.println("A");
7 i=1;
8 }
9 public Super()
10 {
11 System.out.println("B");
12 i+=2;
13 }
14 }
15
16 class MultiStatementDemo extends Super
17 {
18 //int i; //打开这句,结果大不一样。
19 public MultiStatementDemo(String a)
20 {
21 //super();//改成super("a"),结果又不一样。
22 System.out.println("C");
23 i=5;
24 }
25
26 public static void main(String[] args)
27 {
28 int i=4;
29 Super d = new MultiStatementDemo("A");
30 System.out.println(d.i);
31 }
32 }
33
34 /*
35 由于MultiStatementDemo类继承了Super类,当创建对象时,
36 其实在MultiStatementDemo的省略了super()这个方法,如果在Super类中,
37 没有默认构造方法,会报错,楼主可以注释掉那个无参的构造方法,
38 此时需要显示super(参数)调用父类显示的有参构造方法;
39
40 1.题中隐式的调用了默认构造方法,此时输出了B,
41 2.由于MultiStatementDemo中没有定义i,此时,MultiStatementDemo构造方法中的i,代表的是父类的i,i=5,也是对于父类的i赋值的。
42 若在MultiStatementDemo类中声明一个成员变量i,那这个i就为子类的i,i赋值为对子类赋值。
43 3.d.i调用的仍然是父类的i,若MultiStatementDemo中没有声明i,结果为5,若MultiStatementDemo声明了i,结果为2.
44
45 */
by hacket