首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java继承中的构造方法有关问题

2012-01-09 
java继承中的构造方法问题class Person{private String name/*Person(){System.out.println(调用了Perso

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类的带参构造方法吗

[解决办法]
探讨

引用:
LZ其实是对的啦,这边的super是调用的父类的构造方法的,而且LZ注释掉的super方法不能注释的呀,必须得写的,不然父类就不能初始化了,我试了一下,加上super是对的,去掉就错了哇~~~

父类不是有两个构造方法吗,可以用那个带参的初始化啊,Student(){
super("lisi");
System.out.p……

[解决办法]
探讨

引用:
引用:

引用:
LZ其实是对的啦,这边的super是调用的父类的构造方法的,而且LZ注释掉的super方法不能注释的呀,必须得写的,不然父类就不能初始化了,我试了一下,加上super是对的,去掉就错了哇~~~

父类不是有两个构造方法吗,可……

[解决办法]
给super("lisi")加上//时,说明你没显式调用父类的构造器,那么系统就会隐式调用不带参数的父类构造器,但是你又/*Person(){
System.out.println("调用了Person缺省构造函数");
}*/给注释啦。所以系统就调用带参数的,但你又没给人家参数,人家当然就不干啦

热点排行