错误示例程序
继承情况下对象的创建过程示例程序。
示例程序解析
本例不能正确通过Java编译,出现如上所示错误,原因在于执行Square的构造方法时出错。
Java规定子类构造方法在真正被执行之前,需回溯执行父类的构造方法。
由于该Square类是Rectangle类的子类,系统在执行:Square square= new Square (10);时,首先执行父类Rectangle类的构造方法,缺省情况下是执行父类的空构造方法,而此例Rectangle类中已经定义了显式的Rectangle (int a, int b)型的构造方法,所以系统将不再为Rectangle类生成缺省的空构造方法,这样程序运行时就找不到匹配的父类空构造方法。
解决方案一
为父类添加空构造方法
class Rectangle {
...
Rectangle ( ) { } //方法一:添加空构造方法
Rectangle (int a, int b){width =a; height=b;}
...
}
解决方案二
子类的构造方法中明确指明需执行的父类构造方法的类型
class Square extends Rectangle {
...
public Square(int a)
{ super(a,a); ... } //方法二:指明执行的父类特定构造方法
...
}