本帖最后由 魏-玉-彪 于 2013-11-6 22:54 编辑
- package java131106;
- class Super
- {
- Super(){} //方案1, 为父类加上无参构造,子类将自动调用
-
-
- int i=0;
- public Super(String S) //因为这里定义了有参构造,所以系统将不再给出无参构造
- {
- i=1;
- }
- }
- class Demo extends Super
- {
- public Demo(String s)
- {
- //方案二,明确调用父类的带参构造 super(s); 而不是super(String s);
-
- i=2;
- }
- public static void main(String[] args)
- {
- Demo d=new Demo("yes");
- System.out.println(d.i);
- }
- }
复制代码 首先我们要了解一下子类加载的过程:
1首先加载父类 ,也就是调用父类的构造方法.
2加载自己的构造方法
为什么要先调用父类构造呢?因为子类要用到父类中的属性和方法,如果父类构造方法不能调用就证明父类无法初化
就用不了,父类的方法和变量就没法继承.
创建一个对象必须用到构造方法, 如果父类中没有默认构造方法,系统将会自动给一个无参构造方法并调用
而假如有,包括有有参构造,就不再默认生成,,这时,就要子类明确调用有参构造(方案2), 或者在父类中写一个无参
构造方法.Super(){} 花括号中可以有内容,也可以为空(方案1)
在此例中,yes没有参与赋值运算,这里的代码不全,Demo d=new Demo("yes");仅仅表示用子类的有参构造方法创建一个子类对象
|