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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑黑黑马 中级黑马   /  2014-3-11 11:54  /  4865 人查看  /  11 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑黑黑马 于 2014-3-11 19:38 编辑

有这样三个类,Person、Student、GoodStudent。

其中GoodStudent继承于Student,Student继承于Person。

如何证明创建GoodStudent时是否调用了Person的构造函数?

在GoodStudent中是否能指定调用Student的哪个构造函数?

在GoodStudent中是否能指定调用Person的哪个构造函数?
   

以前学过如何创建一个构造函数以及怎么使用,可是可是如何证明调用了就迷茫了。     调用就调用了呗,说明程序运行成功了。证明?是

11 个回复

倒序浏览
本帖最后由 房建斌 于 2014-3-11 12:16 编辑

首先:创建子类对象时,默认会调用父类的构造方法的。在子类的构造方法中可以选择调用父类的某个构造方法。具体看代码。如何证明创建GoodStudent时是否调用了Person的构造函数:创建GoodStudent对象时,Person构造方法先执行,其次是Student再次才是GoodStudent

在GoodStudent中是否能指定调用Student的哪个构造函数:可以显式调用指定的构造方法的。

在GoodStudent中是否能指定调用Person的哪个构造函数:不能跨父类调用爷爷的构造方法的,只能通过Student去调用Person的构造方法。
  1. public class Person {
  2.         private String name;
  3.         
  4.         public Person() {
  5.                 System.out.println("Person 默认构造方法执行");        
  6.         }
  7.         public Person(String name) {
  8.                 this.name = name;
  9.                 System.out.println("Person 带参数构造方法执行 :" + name);        
  10.         }
  11.         

  12. }

  13. class Student extends Person{
  14.         private String name;
  15.         public Student() {
  16.                 System.out.println("Student 默认构造方法执行");        
  17.         }
  18.         public Student(String name) {
  19.                 this.name = name;
  20.                 System.out.println("Student 有参构造方法执行 :" + name);        
  21.         }
  22. }

  23. class GoodStudent extends Student{
  24.         public GoodStudent() {
  25.                 super("name"); //在子类的构造方法的最前面可以调用父类的构造方法。super(),参数可以为空,默认调用父类的无参构造方法
  26.                 System.out.println("GoodStudent 默认构造方法执行");
  27.         }
  28.         
  29.         public static void main(String[] args) {
  30.                 GoodStudent goodStudentg = new GoodStudent();
  31.         }        
  32. }
复制代码




评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
你说的都可以啊,你可以自定义子类的构造函数,并指定它调用的是哪个父类的构造方法。
class A{
    private String name:
          A( ){ }
          A(String name ){
           this.name=name
    }
  }

class B extends A{
  private int age;
       B(  ){ }
       B(String name,int age  ){
            super( name );
            this.age=age;
    }
}
class C extends B{
   private String sex;
      C(String name, int age,  String sex){
          super(name,age);
        this.sex=sex;
}
回复 使用道具 举报
房建斌 发表于 2014-3-11 12:13
首先:创建子类对象时,默认会调用父类的构造方法的。在子类的构造方法中可以选择调用父类的某个构造方法。 ...

谢谢了,留着慢慢研究
回复 使用道具 举报
请不要拿基础面试题发吧里,这样,这个基础测试就没多少用了,尽量自己解决
回复 使用道具 举报
SyouRai_Tsk 发表于 2014-3-11 18:23
请不要拿基础面试题发吧里,这样,这个基础测试就没多少用了,尽量自己解决 ...

ooo   知道了。
回复 使用道具 举报
黑马的牛人就是多啊!!!!
回复 使用道具 举报
啊啊啊啊,我也有这道题。
回复 使用道具 举报
改变 中级黑马 2015-6-16 13:20:06
9#
其实不是很难
回复 使用道具 举报
子类构造函数的第一句隐含执行super();意思是调用父类的无参构造函数
回复 使用道具 举报
public class Person {
        private String name;
        
        public Person() {
                System.out.println("Person 默认构造方法执行");        
        }
        public Person(String name) {
                this.name = name;
                System.out.println("Person 带参数构造方法执行 :" + name);        
        }
        

}

class Student extends Person{
        private String name;
        public Student() {
                System.out.println("Student 默认构造方法执行");        
        }
        public Student(String name) {
                this.name = name;
                System.out.println("Student 有参构造方法执行 :" + name);        
        }
}

class GoodStudent extends Student{
        public GoodStudent() {
                super("name"); //在子类的构造方法的最前面可以调用父类的构造方法。super(),参数可以为空,默认调用父类的无参构造方法
                System.out.println("GoodStudent 默认构造方法执行");
        }
        
        public static void main(String[] args) {
                GoodStudent goodStudentg = new GoodStudent();
        }        
}
回复 使用道具 举报
厉害,厉害
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马