错误示例程序
继承情况下对象的创建过程示例程序。

示例程序解析
本例不能正确通过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); ... } //方法二:指明执行的父类特定构造方法
...
}
文章提供了一个错误的Java程序示例,该示例在继承结构中因父类缺少默认构造方法导致编译错误。解释了Java规定子类构造器需先调用父类构造器,而Rectangle类只有带参数的构造器,没有默认构造器。提供了两种解决方案:一是为父类添加无参数构造器,二是子类构造器中明确指定调用父类的特定构造器。

被折叠的 条评论
为什么被折叠?



