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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java 继承时 子父类的构造函数关系
  1. /*3、构造函数
  2.                         在对子类对象进行初始化时,父类的构造函数也会运行。
  3.                         因为子类的构造函数默认第一行有一条隐式的语句super();
  4.                        
  5.                         super():会访问父类空参数的构造函数,而且子类中的所有构造函数默认第一行都是super()(没有this语句时)

  6.                         为什么子类一定要访问父类中的构造函数?
  7.                                         因为父类中的数据子类可以直接获取。所以子类对象建立时,需要查看父类是如何对这些数据进行初始化的
  8.                                 所以子类在对对象初始化时,要先访问一下父类中的构造函数
  9.                                 如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定

  10.                         注意:super语句一定定义在子类构造函数的第一行


  11.                 结论:(子类的实例化过程)
  12.                                 子类的所有构造函数,默认都会访问父类中空参数的构造函数
  13.                         因为子类的每一个构造函数内的第一行都有一句隐式super()(先调用this也一样);
  14.                        
  15.                         当父类中没有空参数的构造函数时,子类必须通过super语句形式,显式的指定访问父类的构造函数
  16.                         子类中的构造函数至少有一个构造函数会访问父类的构造函数*/
  17. class Fu
  18. {

  19.         /**构造函数*/
  20.         /**空参数的构造函数,子类构造函数默认访问这个,当手动建立带参数的构造函数时,
  21.         子类中的构造函数必须通过super语句指定访问父类的构造函数,否则编译失败,提示找不到构造函数*/

  22. //        Fu(int n) //使用这个,子类没有super语句指定时,编译失败  
  23.         Fu()
  24.         {
  25.          System.out.println("Fu run");
  26.         }
  27. }
  28. class Zi extends Fu
  29. {
  30.        /**构造函数*/
  31. Zi()
  32.         {
  33.             //        super();  //隐式的语句
  34.           //    super(2); //当父类构造函数为Fu(int n)时,需使用此super语句指定访问父类的构造函数
  35.               System.out.println("Zi run");
  36.         }
  37. }
  38. class ExtendsDemo2
  39. {
  40.   public static void main(String[] args)
  41.         {

  42.         Zi z = new Zi();  /**new 时,先加载Fu类,然后加载Zi类*/
  43. }
复制代码



2 个回复

倒序浏览
复习了~~~
回复 使用道具 举报
xuhao3622603 来自手机 中级黑马 2015-7-1 22:10:56
藤椅
看看,还行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马