- class Frotz
- {
- public Frotz(int i)
- {
- }
- }
- class childClazz extends Frotz
- {
- }
- //上面的写法将产生No constuctor Frotz() in the class,因为Frotz已经显式创建了有参构造函数.
- //而子类在继承父类时,却没有定义显式的调用父类的构造函数,由于虚拟机找不到默认无参的构造函数,
- //所以就会在编译时发生报错.
- //上面代码应该为:
- class Frotz
- {
- public Frotz(int i)
- {
- }
- }
- class ChildClazz extends Frotz
- {
- public ChildClazz()
- {
- sepper(20);
- }
- }
- //这样就OK了.
- /*总结:
- 1、当一个类没有定义构造函数时,虚拟机默认会创建一个无参的构造函数。
- 2、当一个类定义了构造函数,那么虚拟机不会再创建构造函数。
- 3、子类在继承父类时,如果父类定义了非无参构造函数,那么子类必须显式的调用父类的构造函数,如supper("参数列表"),参数列表与父类已定义的参数列表对应,而且这句语句
- 必须在了类构造函数中的第一行定义。
- 4、当一个类继承父类时,如果父类没有定义构造函数或定义一个无参构造函数时,子类在继承时,可以不用显示调用父类的构造函数,由虚拟机自动调用。
复制代码 |