黑马程序员技术交流社区
标题: 子父类中构造函数的特点---子类实例化过程 [打印本页]
作者: 帅哥哥 时间: 2014-5-17 20:28
标题: 子父类中构造函数的特点---子类实例化过程
先上代码
- class Fu
- {
- static
- {
- System.out.println("Fu class in~");
- }
- {
- System.out.println("Fu 构造代码块 run~");
- }
- Fu()
- {
- System.out.println("Fu 构造函数 run~");
- }
- }
- class Zi extends Fu
- {
- static
- {
- System.out.println("Zi class in~");
- }
- {
- System.out.println("Zi 构造代码块 run~");
- }
- Zi()
- {
- System.out.println("Zi 构造函数 run~");
- }
- }
- class ExtendsDemo
- {
- public static void main (String [] args)
- {
- new Zi();
- }
- }
复制代码
在子类对象进行初始化时,父类的构造函数也会运行
那是因为子类构造函数默认第一行有一条隐式语句 super();
它会访问父类中空参数的构造函数,而且子类中所有构造函数第一行默认都是super();
为什么子类一定要访问父类中的构造函数?
因为父类中的数据子类可以直接获取,所以子类在建立对象时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象进行初始化时,需要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
注意:super(); 语句一定定义在子类构造函数的第一行。
因为this() 语句也只能放在构造函数的第一行,所以这两个语句只能有一个。
子类的所有构造函数,默认都会访问父类中空参数的构造函数,因为每一个子类的构造函数内的第一行都有一个隐式的super(); 当父类中没有空参数的构造函数时,子类必须手动通过super语句形式指定要访问的父类中的构造函数。当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。
子类中至少有一个构造函数会访问父类中的构造函数。
父类中的构造函数第一行也有一个隐式的super();
java中有一个类是所有类的父类------object类
作者: renshu16 时间: 2014-5-18 10:39
解说很详尽,实例很典型,感谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |