@隔叶黄莺
在构造子类实例前必须构造一个父类实例作为子类实例的部分
这句话太正确了。
如果没有默认增加ClassName()构造方法。
晕,刚刚发现,句读错了,中间有个逗号。汗一个 XD
如果没有,默认增加ClassName()构造方法。
其实 俺这篇文字 完全可以三句话说完的
第一句,任何一个类都有Constructor
第二句,任何一个类的Constructor第一行代码就是调用父类的构造函数
第三局,就是 以上两句说的东西,你可以代码中不写,因为有默认实现,并且默认实现与编码出来的实现不能并存,会被覆盖。
XD 骗字数而已 XD
@Matthew Chen
是,继承另一个类也许更加清楚一些,但是 既然文章的主要意思是说默认实现与覆盖关系的 hoho 这么说是一种惯性XD
@隔叶黄莺
在构造方法内部,编译器会检查第一行代码是否为super构造方法,如果不是,默认添加super()
按照上面这句话的理解 就是
package org.myth.test;
public class SuperSon extends SuperMan{
SuperSon(){
System.out.println("this is super son");
}
}
其实等同于
package org.myth.test;
public class SuperSon extends SuperMan{
SuperSon(){
super();
System.out.println("this is super son");
}
}
显然,父类中是不存在无参数构造方法的,所以编译器回报错,不存在super()构造方法。
另外,对于您说的has-a的关系,特定界定之下可以这么讲,但是更准确而言,子类是父类 应该是is a 的关系。
晕 大家难道就没有 发现 递归 运算最大的问题是重复计算嘛?
@隔叶黄莺
这个问题,你看我最后一个错误代码示例 就知道了 ^_^