子父类构造函数问题! 本帖最后由 GUI007 于 2012-01-06 17:05:47 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为它第一句话调用了另一个构造类,而另一个构造类第一句话是super,所以符合规范。执行顺序如代码调用顺序,没有特殊性。 记住 super调用父类的构造方法,而在对象实例的时候同样要调用一次Person p1 = new Person("A");Person p2 = new Person("B","shanghai");Student s1 = new Student("C","s1");Student s2 = new Student("C","shanghai","s2");这后面new的都是构造方法,而在构造方法里的第一行就是super,有的时候没写super也会调哦! 唉,都是答非所问,人家问的是问什么在Student(String name, String school){ this(name,"beijing",school); }这个构造函数中没有调用父类的构造函数。因为第一个构造函数用了this();调用了自己的第二个 Student(String n, String l,String school)构造方法,而这个构造方法中有super()方法。所以在第一个构造函数就不用写super();方法了。java规定this()与super(),都必须写在构造函数的第一行,所以在创建构造函数时两者只能出现一个,也只需要出现一个! this()和super()都必须写第一行且只能写一个不写的时候子类默认有super()调父类空的构造方法如果父类没有空的构造方法就不调 this只能调用本类中的构造方法 这个问题java规定this()与super(),都必须写在构造函数的第一行,那么要么只能写this() 要么super(),那如我提的问题,写的是this() 这样不是先执行了子类的构造方法了么? 调用子类之前,调用父类构造函数是为了完成初始化父类的信息。而你现在通过this调用子类的另外一个,仍旧是完成了对父类的初始化。像调用父类构造函数和本身的其他构造函数的时候,都要求在构造函数的第一行进行引入,其它的地方会报错的。需要了解的几个点:1. 如果没有类没有显示的声明构造函数,那么它会有一个默认的构造函数。2. 子类可以显示的执行父类构造函数,如果没有显示调用,JVM会自动执行其没有参数的构造函数,当然如果你父类的没有不带参数的构造函数,那么就会出现错误了。// 简单的一个例子,参考class Person { // 默认的构造函数 public Person() { } // 自定义的构造函数 public Person(String name) { }}class Student extends Person { // 构造函数1 public Student() {// super("test"); // 如果父类的默认构造函数不存在,则必须显示的调用父类构造函数 } //构造函数2 public Student(String name) { this(); System.out.println(name);// this(); // 出现错误 }} 不管你写多少个this(); 到最后始终会有一个super在第一行。意思就是说,不管你怎么写构造函数,那么这些类的构造都要通过父类的构造器。就是构造器的执行顺序从Object--->你具体的类 帮忙看看程序哪里出问题了,怎么修改? 求高手赐教,我的java程序到底哪里出错了!? 以前在C里把一个结构体保存成文件,或从文件里读出结构体 java实现网页控件坐标 散分! 求开发思路! 帮忙看一下小代码 初学者的问题 请教 javadoc怎么生成当前目录源程序的文档?没有用包。 请问:我怎么编Java程序?用什么编辑器较好?哪儿有下载?谢谢! 求一java正则表达式 为什么我这个JAVA程序不能实现图片的下载呢?
Person p1 = new Person("A");
Person p2 = new Person("B","shanghai");
Student s1 = new Student("C","s1");
Student s2 = new Student("C","shanghai","s2");
这后面new的都是构造方法,而在构造方法里的第一行就是super,有的时候没写super也会调哦!
Student(String name, String school){
this(name,"beijing",school);
}
这个构造函数中没有调用父类的构造函数。因为第一个构造函数用了this();调用了自己的第二个 Student(String n, String l,String school)构造方法,而这个构造方法中有super()方法。所以在第一个构造函数就不用写super();方法了。
java规定this()与super(),都必须写在构造函数的第一行,所以在创建构造函数时两者只能出现一个,也只需要出现一个!
不写的时候子类默认有super()调父类空的构造方法
如果父类没有空的构造方法就不调
1. 如果没有类没有显示的声明构造函数,那么它会有一个默认的构造函数。
2. 子类可以显示的执行父类构造函数,如果没有显示调用,JVM会自动执行其没有参数的构造函数,当然如果你父类的没有不带参数的构造函数,那么就会出现错误了。
// 简单的一个例子,参考class Person {
// 默认的构造函数
public Person() {
}
// 自定义的构造函数
public Person(String name) {
}
}class Student extends Person {
// 构造函数1
public Student() {
// super("test"); // 如果父类的默认构造函数不存在,则必须显示的调用父类构造函数
}
//构造函数2
public Student(String name) {
this();
System.out.println(name);
// this(); // 出现错误
}
}