在做java的实验题时遇到了一个报错
Implicit super constructor Point() is undefined. Must explicitly invoke another constructor
程序的主要代码如下:
public class Point { int x, y; //Point(){}//注意这一行
Point(int a, int b){ x = a; y = b; } public double distance() { return Math.sqrt(x*x+y*y); } void print() { System.out.println("This is the superclass!"); } public static void main(String[] args) { // TODO Auto-generated method stub
Point superp = new Point(1,1); System.out.println("superp.distance()="+superp.distance()); superp.print(); Point3d subp = new Point3d(1,1,1); subp.print(); } } class Point3d extends Point{ int z; Point3d(int i, int j, int k){//如果没有上面注释的那一行,这里就会报错 x = i; y = j; z = k; } void print() { System.out.println("This is the subclass!"); } }
我们知道,Point3d继承了Point,那么在构造Point3d之前,就会先构造Point。
new Point3d的时候用的是默认的构造函数,而子类默认的构造函数调用的也是父类默认的构造函数。
但是父类有了人为指定的构造函数,就覆盖了本身自动生成的默认无参构造函数,换言之,父类没有无参构造函数,那么就出错了。
所以解决办法是手动再在父类中添加一个无参的与默认构造函数形式相同的构造函数,即:
public class Point { int x, y; Point(){}//注意这一行
Point(int a, int b){ x = a; y = b; }