黑马程序员技术交流社区

标题: 关于构造函数的继承 [打印本页]

作者: 黑黑黑马    时间: 2014-3-11 11:54
标题: 关于构造函数的继承
本帖最后由 黑黑黑马 于 2014-3-11 19:38 编辑

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

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

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

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

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

以前学过如何创建一个构造函数以及怎么使用,可是可是如何证明调用了就迷茫了。     调用就调用了呗,说明程序运行成功了。证明?是
作者: 房建斌    时间: 2014-3-11 12:13
本帖最后由 房建斌 于 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. }
复制代码





作者: 平凡成就非凡    时间: 2014-3-11 12:25
你说的都可以啊,你可以自定义子类的构造函数,并指定它调用的是哪个父类的构造方法。
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 13:02
房建斌 发表于 2014-3-11 12:13
首先:创建子类对象时,默认会调用父类的构造方法的。在子类的构造方法中可以选择调用父类的某个构造方法。 ...

谢谢了,留着慢慢研究
作者: SyouRai_Tsk    时间: 2014-3-11 18:23
请不要拿基础面试题发吧里,这样,这个基础测试就没多少用了,尽量自己解决
作者: 黑黑黑马    时间: 2014-3-11 19:39
SyouRai_Tsk 发表于 2014-3-11 18:23
请不要拿基础面试题发吧里,这样,这个基础测试就没多少用了,尽量自己解决 ...

ooo   知道了。
作者: a191170796    时间: 2014-7-14 18:31
黑马的牛人就是多啊!!!!
作者: 小七28    时间: 2015-4-3 01:13
啊啊啊啊,我也有这道题。
作者: 改变    时间: 2015-6-16 13:20
其实不是很难
作者: 城南年少    时间: 2015-7-16 19:18
子类构造函数的第一句隐含执行super();意思是调用父类的无参构造函数
作者: 段山虎    时间: 2015-8-13 23:39
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();
        }        
}
作者: houbofly    时间: 2016-1-4 23:41
厉害,厉害




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2