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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

先上代码
  1. class Fu
  2. {
  3.         static
  4.         {
  5.                 System.out.println("Fu class in~");
  6.         }
  7.         {
  8.                 System.out.println("Fu 构造代码块 run~");
  9.         }
  10.         Fu()
  11.         {
  12.                 System.out.println("Fu 构造函数 run~");
  13.         }
  14. }
  15. class Zi extends Fu
  16. {
  17.         static
  18.         {
  19.                 System.out.println("Zi class in~");
  20.         }
  21.         {
  22.                 System.out.println("Zi 构造代码块 run~");
  23.         }
  24.         Zi()
  25.         {
  26.                 System.out.println("Zi 构造函数 run~");
  27.         }
  28. }
  29. class ExtendsDemo
  30. {
  31.         public static void main (String [] args)
  32.         {
  33.                 new Zi();
  34.         }
  35. }
复制代码




在子类对象进行初始化时,父类的构造函数也会运行
那是因为子类构造函数默认第一行有一条隐式语句 super();
它会访问父类中空参数的构造函数,而且子类中所有构造函数第一行默认都是super();
为什么子类一定要访问父类中的构造函数?
因为父类中的数据子类可以直接获取,所以子类在建立对象时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象进行初始化时,需要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
注意:super(); 语句一定定义在子类构造函数的第一行。
因为this() 语句也只能放在构造函数的第一行,所以这两个语句只能有一个。
子类的所有构造函数,默认都会访问父类中空参数的构造函数,因为每一个子类的构造函数内的第一行都有一个隐式的super(); 当父类中没有空参数的构造函数时,子类必须手动通过super语句形式指定要访问的父类中的构造函数。当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。
子类中至少有一个构造函数会访问父类中的构造函数。
父类中的构造函数第一行也有一个隐式的super();
java中有一个类是所有类的父类------object

1 个回复

倒序浏览
解说很详尽,实例很典型,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马