构造函数不会被继承,只是被子类调用而已
- 子类所有的构造函数默认调用父类的无参构造函数。
- 子类的某个构造函数想调用父类的其他的带参数的构造函数,第一行人为添加super(val1,val2[,val3…]).
- super指代父类对象,可以在子类中使用 super.父类方法名();调用父类中的方法。
class Bee00{
int id; //蜜蜂的唯一标识
int x,y; //蜜蜂现在所处的位置坐标(最小单位:像素)
int honey; //当前蜜蜂采集蜂蜜的数量(单位:mg)
//最好加上下面这一行
// public Bee00(){}
public Bee00(int id,int x,int y)
{
this.id = id;
this.x = x;
this.y = y;
this.honey = 0;
System.out.println("Bee: "+id+" come from ("+x+","+y+")");
}
public void showHoney()
{
System.out.println("Bee: "+id+" has ("+honey+"mg) honey ");
}
}
public class Bee01 extends Bee00{
public Bee01(int id,int x,int y){
super(id,x,y);
}
public Bee01(int id){
//super(id,0,0);
this.id= id;
}
public static void main(String[] args)
{
Bee00 bee1 = new Bee01(1);
Bee00 bee2 = new Bee01(2,100,100);
System.out.println(bee1);
System.out.println(bee2);
}
}
D:\JavaLesson\第一次课资料>javac Bee01.java
Bee01.java:26: 错误: 无法将类 Bee00中的构造器 Bee00应用到给定类型;
public Bee01(int id){
^
需要: int,int,int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
1 个错误
因为父类Bee00没有无参的构造函数,子类如果想有自己的构造函数,必须现在构造函数第一行显式调用super(args);
所以一般会在父类中加上无参的构造函数。这样的话,子类创建自己的构造函数时就可以不用显式调用super(…);