黑马程序员技术交流社区

标题: 面向对象 [打印本页]

作者: 原子弹    时间: 2014-3-26 00:09
标题: 面向对象
有这样三个类,Person,Student,GoodStudent.
      GoodStudent继承于Student,Student继承Person.
如何证明创建GoodStudent时是否调用了Person的构造函数?
在GoodStudent中是否能指定调用Student的那个构造函数?
在GoodStudent中是否能指定调用Person的那个构造函数?
  求大神指点啊!!!


作者: 630681386@qq.co    时间: 2014-3-26 00:17
在父类的构造函数中输出一句话就好,看创建子类的对象的时候那句话是否会输出来
作者: tcny    时间: 2014-3-26 00:31
  1. class Person{
  2.         String name;
  3.         Person(){
  4.                 System.out.println("Pserson constructor...");
  5. }
  6. }
  7. class Student extends Person{
  8.         String id;
  9.         Student(){
  10.                 System.out.println("Student constructor...");
  11.         }
  12. }
  13. class GoodStudent extends Student{
  14.         String gender;
  15.         GoodStudent(){
  16.                 System.out.println("GoodStudent constructor...");
  17.         }
  18. }
  19. public class Test {

  20.         public static void main(String[] args) {

  21.                 GoodStudent gs = new GoodStudent();
  22.                 /*打印结果如下:
  23.                  * Pserson constructor...
  24.                  * Student constructor...
  25.              * GoodStudent constructor...
  26.              * 说明按Person->Student->GoodStudent顺序调用构造方法
  27.              * */
  28.         }
  29. }
复制代码




作者: tcny    时间: 2014-3-26 00:36
  1. class Person{
  2.         String name;
  3.         Person(){
  4.                 System.out.println("Pserson constructor...");
  5.         }
  6.         Person(String name){
  7.                 this.name = name;
  8.                 System.out.println("Pserson constructor..."+this.name);
  9.         }
  10. }
  11. class Student extends Person{
  12.         String id;
  13.         Student(){
  14.                 System.out.println("Student constructor...");
  15.         }
  16.         Student(String name, String id){
  17.                 [color=YellowGreen]super(name);//通过这种方式指定,如果指定不带参的构造方法就写super();[/color]
  18.                 this.id = id;
  19.                 System.out.println("Student constructor..."+name+ id);
  20.         }
  21. }
  22. class GoodStudent extends Student{
  23.         String gender;
  24.         GoodStudent(){
  25.                 System.out.println("GoodStudent constructor...");
  26.         }
  27.         GoodStudent(String name, String id,String gender){
  28.                 super(name, id);//通过这种方式指定
  29.                 this.gender = gender;
  30.                 System.out.println("GoodStudent constructor..."+name + id + gender);
  31.         }
  32. }
  33. public class Test {

  34.         public static void main(String[] args) {

  35.                 GoodStudent gs = new GoodStudent("张三", "20140101", "女");
  36.         }
  37. }
复制代码

作者: 原子弹    时间: 2014-3-26 01:32
在GoodStudent中是否能指定调用Student的那个构造函数?
  能   通过super();
在GoodStudent中是否能指定调用Person的那个构造函数?
这个能   是不是不能   必须通过Student类调用?
作者: luoyilan222    时间: 2014-3-26 10:22
1, 如何证明创建GoodStudent时是否调用了Person的构造函数?
执行new GoodStudent()会调用默认构造函数
你可以在Person中写一个默认构造函数执行后你看有打印Person()就知道是否调用Person构造函数
public Person(){
        System.out.println(“Person()”);
}
2,在GoodStudent中是否能指定调用Student的那个构造函数?(当然可以)
既然是想调用Student的那个构造函数,肯定有类似下面的构造函数
Student(){……}, Student(int age){……}, Student(String name,int age){……}
你只需要GoodStudent(){
                Super();//会调用Student(){……},
}
GoodStudent(parameters){
                Super(parameters);//会调用Student(int age){……}
}
GoodStudent(parameters1, parameters2){
                Super(parameters1, parameters2);//会调用Student(String name,int age){……}
}
3,在GoodStudent中是否能指定调用Person的那个构造函数?
直接在GoodStudent中是不能指定调用Person的那个构造函数
但是可以间接的指定
你可以传一个状态值到Student中,然后再Student中选择掉用Person哪一个构造函数
下面我就不唉排的列举了,和上面的原理是一样的





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