Homework 1
Briefly describe an error from my past projects.
很久以前的一个项目,忘了具体的代码,以下是error大致内容:
1 class Father{ 2 String s; 3 4 public Father(String s){ 5 this.s = s; 6 } 7 } 8 9 public class Kid extends Father{ 10 int x = 200; 11 12 public Kid(String s){ 13 } 14 15 public static void main(String[] args){ 16 Kid s = new Kid; 17 } 18 }
然后12行报错,导致整个项目无法继续。
后来通过上网查找,才知道错误原因:
原来子类的无论是无参构造方法还是有参构造方法,都会默认调用父类的无参构造方法;而由于父类已经定义了有参构造方法,无默认无参构造方法,所以编译器报错。
所以解决方式是需要在父类中定义一个无参构造方法。
这个小错误之所以让人印象深刻,是因为在我们学习构造方法时,一般只会掌握“如果一个类没有定义构造方法,编译器会默认插入一个无参数的构造方法;但是如果一个构造方法在父类中已定义,在这种情况,编译器是不会自动插入一个默认的无参构造方法”,而回忽视上面提到的问题。这也是我第一次知道构造方法还有这样的性质,所以印象深刻。