- class Super
- {
- int i=0;
- public Super(String a)
- {
- System.out.println("A");
- i=1;
- }
- public Super()
- {
- System.out.println("B");
- i+=2;
- }
- }
- class Demo extends Super
- {
- //int i; //打开这句,结果大不一样。
- public Demo(String a)
- {
- //super();//改成super("a"),结果又不一样。
- System.out.println("C");
- i=5;
- }
- public static void main(String[] args)
- {
- int i=4;
- Super d = new Demo("A");
- System.out.println(d.i);
- }
- }
- /*
- 由于Demo类继承了Super类,当创建对象时,
- 其实在Demo的省略了super()这个方法,如果在Super类中,
- 没有默认构造方法,会报错,楼主可以注释掉那个无参的构造方法,
- 此时需要显示super(参数)调用父类显示的有参构造方法;
- 1.题中隐式的调用了默认构造方法,此时输出了B,
- 2.由于Demo中没有定义i,此时,Demo构造方法中的i,代表的是父类的i,i=5,也是对于父类的i赋值的。
- 若在Demo类中声明一个成员变量i,那这个i就为子类的i,i赋值为对子类赋值。
- 3.d.i调用的仍然是父类的i,若Demo中没有声明i,结果为5,若Demo声明了i,结果为2.
- */
复制代码 |