java继承中的构造方法问题
class Person{
private String name;
/*Person(){
System.out.println("调用了Person缺省构造函数");
}*/
Person(String name){
this.name=name;
System.out.println("调用了Person带参构造函数");
}
}
class Student extends Person{
private String school;
Student(){
super("lisi");
System.out.println("调用了Student缺省构造函数");
}
Student(String school){
// super("lisi");
this.school=school;
System.out.println("调用了Student带参构造函数");
}
}
public class TestPerson{
public static void main(String[] args){
Student s1=new Student();
}
}
如上代码编译会通不过,但是将super("lisi")的注释去掉就能通过,求解释。。。
------解决方案--------------------super是用在和父方法名字一样的情况的,知否啊。你那个 super("lisi") 等于调用了Person类的Student(String s) 的方法,问题是这个方法不存在
你可以吧super("lisi") 改成 Person("lisi"); 或者给给person做个setName的方法。
------解决方案--------------------学习了
------解决方案--------------------LZ其实是对的啦,这边的super是调用的父类的构造方法的,而且LZ注释掉的super方法不能注释的呀,必须得写的,不然父类就不能初始化了,我试了一下,加上super是对的,去掉就错了哇~~~
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------给super("lisi")加上//时,说明你没显式调用父类的构造器,那么系统就会隐式调用不带参数的父类构造器,但是你又/*Person(){
System.out.println("调用了Person缺省构造函数");
}*/给注释啦。所以系统就调用带参数的,但你又没给人家参数,人家当然就不干啦