分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
public class FF {}class SS extends FF{ public SS (int a,int b){ //do something }}
上面的代码没有问题。
public class FF { public FF(int a){}}class SS extends FF{}
对于上面的代码,编译是会出问题的,出什么问题?
Implicit super constructor FF() is undefined for default constructor. Must define an explicit constructor
什么意思?
我们知道,ss继承了ff,那么在构造ss之前,就会先构造ff。
ss没有人为指定的构造函数,因此new SS的时候就用的是默认的构造函数,而子类默认的构造函数调用的也是父类默认的构造函数。
但是父类有了人为指定的构造函数,就覆盖了本身自动生成的默认无参构造函数,换言之,父类没有无参构造函数,那么就出错了。
public class FF { public FF(int a){}}class SS extends FF{ public SS(String a){ System.out.println("llll"); }}
上面的代码还是会出错,为什么?
因为不管子类的构造函数是什么样的形式,都会默认调用父类的默认的无参的构造函数。
上面的情况父类依然没有构造函数。
那怎么办?
或者
public class FF {//去掉构造函数}class SS extends FF{public SS(String a){ System.out.println("llll");}}
或者
public class FF { public FF(int a){}}class SS extends FF{ public SS(int a){ //指定要调用父类的某个构造函数 super.(a); System.out.println("llll"); }}
哎 感觉几年的java白学了。
感谢交大的张晨同学。