黑马程序员技术交流社区
标题:
调用默认构造函数问题
[打印本页]
作者:
xiewen
时间:
2013-4-23 17:19
标题:
调用默认构造函数问题
本帖最后由 xiewen 于 2013-4-26 10:24 编辑
有这样三个类,Person,Student.GoodStudent。其中Student继承了Person,GoodStudent继承了Student,三个类中只有默认的构造函数,用什么样的方法证明在创建Student类的对象的时候是否调用了Person的构造函数,在创建GoodStudent类的对象的时候是否调用了Student构造函数?如果在创建Student对象的时候没有调用Person的构造函数,那么采用什么样的手段可以调用父类的构造函数?
作者:
王怀亮
时间:
2013-4-23 17:43
下面程序的运行结果是:
person
student
GoodStudent
这就说明在创建Student类的对象的时候调用了Person的构造函数,在创建GoodStudent类的对象的时候调用了Student构造函数
public class GoodStudent extends Student{
public GoodStudent() {
System.out.println("GoodStudent");
}
public static void main(String []a){
GoodStudent gStudent = new GoodStudent();
}
}
class Student extends Person{
public Student() {
System.out.println("student");
}
}
class Person {
public Person() {
System.out.println("person");
}
}
复制代码
这种问题自己谢谢代码就好了
作者:
xiewen
时间:
2013-4-23 18:30
不是说默认构造函数吗,怎么可以把构造函数写出来?,这样我肯定会啊,应该不是这样吧?
作者:
xiewen
时间:
2013-4-23 18:30
不是说默认构造函数吗,怎么可以把构造函数写出来?,这样我肯定会啊,应该不是这样吧?
作者:
Miss小强
时间:
2013-4-23 19:40
一定会调用到父类的构造函数的。。如果你没有指定也会默认执行;
你可以自己写一个屋参数的构造函数,在里面加一个打印语句 啊。。。
一看就知道 了啊
作者:
刘海陆
时间:
2013-5-19 22:08
说得对呀,默认的构造函数的话,就不应该有这个了 我感觉应该用构造代码块
作者:
Leo_yeung
时间:
2013-8-15 22:17
其实不是在创建对象时,是在创建派生类时就会调用父类的默认构造函数,因为默认的构造函数看不到,所以写了一个无参数的构造函数,就相当于默认构造函数;如下,注释掉无参数构造构造函数后,编译就会报错,说明在创建派生类时调用了父类默认的构造函数;另外,无参数的构造函数在创建派生类的对象时,是会以派生顺序自动调用的;如果是有参数的构造函数,调用时用super(参数)。
class Person{
String name="";
int age=0;
double score=0.0;
//public Person(){}
public Person(String name,int age){
this.name=name;
this.age=age;
}
}
class Student extends Person{
//public Studen(){}
public Studen(String name,int age,double score){
this.name=name;
this.age=age;
this.score=score;
}
}
class GoodStudent extends Studen{
public GoodStudent(){}
}
class Test{
public static void main(String[] args){
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2