java中的继承
abstract class Person {private String name;
private int age;
private String id;
private double mouth;
Person(String name,int age,String id,double mouth){
this.name=name;
this.age=age;
this.id=id;
this.mouth=mouth;
}
abstract void work();
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public void setId(String id){
this.id=id;
}
public String getId(){
return id;
}
public void setMouth(double mouth){
this.mouth=mouth;
}
}
***************************************************************************
public class Manager extends Person{
Manager(String name,int age,String id,double mouth){
super(name,age,id,mouth);
}
public void work(){
}
}
为什么子类继承父类,子类的构造函数就一定要带参数呢? --------------------编程问答-------------------- 楼主,你在子类构造方法中用了super(参数列表)方法;这个方法代表调用父类与之参数对应的构造方法,父类的构造方法有参数,所以子类构造方法必然有参数啊。如果在父类有无参构造方法,那么子类构造方法就可以这样写
Manager() {这样就不需要参数了,楼主该看看有关继承的一些基础知识 --------------------编程问答-------------------- 因为你父类没有无参的构造函数,所以子类只继承了带参数的父类的构造函数 --------------------编程问答--------------------
super();
}
子类调用父类缺省构造函数,在抽象类(abstract)中是个特例.在一般类的继承中,缺省构造函数是不能调用的。
--------------------编程问答-------------------- lz的写法是特例,就是不行 --------------------编程问答-------------------- 楼主要明白一点,当一个类自定义构造函数进行初始化后,该类本身存在的默认空参数的构造函数就没有了。
楼主程序中的父类自定义了有参数的构造函数,那么子类空参数构造函数就不行了,必须和父类中的构造函数一样,如果父类中是没有参数的构造函数,则子类中也要和父类相同! --------------------编程问答-------------------- 你代码中子类的构造方法的作用是调用父类构造方法,初始化父类,而你的父类构造方法要求带上几个参数,理所当然地必须带上参数。 --------------------编程问答--------------------
呵呵,是啊,如果你的父类没有参数而你的子类使用 super()硬是要写参数,你觉得是对的吗? --------------------编程问答-------------------- (子类继承了父类的构造方法?),你的父类构造方法有参数,子类不能调用父类默认的无参的super(),只能super(参数),那么子类也只好需要参数了。 --------------------编程问答-------------------- 子类继承父类,连着它的构造方法也会继承,而它父类的构造方法是带参数的,所以子类不能调用父类默认的无参构造函数,所以子类的构造函数也需要参数。
补充:Java , Java SE