一个关于子类的构造问题 请参看:Thinking in Java 2nd 前7章中对于继承构造的描述
public class Point { proceted int x, y; Point(int ix, int iy) { x = ix; y = iy; } Point(){} //去掉这一行,编译出错 public double distance() { return Math.sqrt(x * x + y * y); } public static void main(String args[]){ Point P=new Point(1,1); System.out.println("p.distance()="+P.distance()); Point3d p=new Point3d(1,1,1); System.out.println("p.distance()="+p.distance()); } }class Point3d extends Point { private int z; Point3d(int ix,int iy,int iz){super(ix,iy);z=iz;} public double distance() { return Math.sqrt(x*x+y*y+z*z); } }
Point3d(int ix,int iy,int iz) {
super( ix, iy );//!!!!!!!!!!!!
x=ix;
y=iy;
z=iz;
}
自己构造时,要现调用父类的构造函数
请参看:Thinking in Java 2nd 前7章中对于继承构造的描述
{
proceted int x, y;
Point(int ix, int iy) {
x = ix;
y = iy;
}
Point(){} //去掉这一行,编译出错 public double distance() {
return Math.sqrt(x * x + y * y);
} public static void main(String args[]){
Point P=new Point(1,1);
System.out.println("p.distance()="+P.distance());
Point3d p=new Point3d(1,1,1);
System.out.println("p.distance()="+p.distance());
}
}class Point3d extends Point
{
private int z;
Point3d(int ix,int iy,int iz){super(ix,iy);z=iz;}
public double distance()
{
return Math.sqrt(x*x+y*y+z*z);
}
}
super();
proceted int x, y;
不过,我想楼主应该将构造的知识系统地看一下 ^_^
就是这样的
如果父类没有提供一个默认构造方法,而有一个或多个带参数的构造方法的话,系统不会自动为这个类生成默认构造方法,因此在继承的时候,就会出错。