A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiewen 中级黑马   /  2013-4-23 17:19  /  1978 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xiewen 于 2013-4-26 10:24 编辑

有这样三个类,Person,Student.GoodStudent。其中Student继承了Person,GoodStudent继承了Student,三个类中只有默认的构造函数,用什么样的方法证明在创建Student类的对象的时候是否调用了Person的构造函数,在创建GoodStudent类的对象的时候是否调用了Student构造函数?如果在创建Student对象的时候没有调用Person的构造函数,那么采用什么样的手段可以调用父类的构造函数?

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

6 个回复

倒序浏览
下面程序的运行结果是:
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. }
复制代码
这种问题自己谢谢代码就好了

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
不是说默认构造函数吗,怎么可以把构造函数写出来?,这样我肯定会啊,应该不是这样吧?
回复 使用道具 举报
不是说默认构造函数吗,怎么可以把构造函数写出来?,这样我肯定会啊,应该不是这样吧?
回复 使用道具 举报
一定会调用到父类的构造函数的。。如果你没有指定也会默认执行;
你可以自己写一个屋参数的构造函数,在里面加一个打印语句 啊。。。
一看就知道 了啊
回复 使用道具 举报
说得对呀,默认的构造函数的话,就不应该有这个了 我感觉应该用构造代码块
回复 使用道具 举报
其实不是在创建对象时,是在创建派生类时就会调用父类的默认构造函数,因为默认的构造函数看不到,所以写了一个无参数的构造函数,就相当于默认构造函数;如下,注释掉无参数构造构造函数后,编译就会报错,说明在创建派生类时调用了父类默认的构造函数;另外,无参数的构造函数在创建派生类的对象时,是会以派生顺序自动调用的;如果是有参数的构造函数,调用时用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){
               
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马