黑马程序员技术交流社区

标题: 调用默认构造函数问题 [打印本页]

作者: 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构造函数
  1. public class GoodStudent extends Student{

  2.         public  GoodStudent() {
  3.                 System.out.println("GoodStudent");
  4.         }
  5.         public static void main(String []a){
  6.                 GoodStudent gStudent = new GoodStudent();
  7.                
  8.         }
  9. }
  10. class Student extends Person{

  11.         public  Student() {
  12.                 System.out.println("student");
  13.         }
  14. }
  15. class Person {

  16.         public  Person() {
  17.                 System.out.println("person");
  18.         }
  19. }
复制代码
这种问题自己谢谢代码就好了
作者: 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