黑马程序员技术交流社区
标题:
java 继承时 子父类的构造函数关系
[打印本页]
作者:
fmi110
时间:
2015-7-1 17:26
标题:
java 继承时 子父类的构造函数关系
java 继承时 子父类的构造函数关系
/*3、构造函数
在对子类对象进行初始化时,父类的构造函数也会运行。
因为子类的构造函数默认第一行有一条隐式的语句super();
super():会访问父类空参数的构造函数,而且子类中的所有构造函数默认第一行都是super()(没有this语句时)
为什么子类一定要访问父类中的构造函数?
因为父类中的数据子类可以直接获取。所以子类对象建立时,需要查看父类是如何对这些数据进行初始化的
所以子类在对对象初始化时,要先访问一下父类中的构造函数
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定
注意:super语句一定定义在子类构造函数的第一行
结论:(子类的实例化过程)
子类的所有构造函数,默认都会访问父类中空参数的构造函数
因为子类的每一个构造函数内的第一行都有一句隐式super()(先调用this也一样);
当父类中没有空参数的构造函数时,子类必须通过super语句形式,显式的指定访问父类的构造函数
子类中的构造函数至少有一个构造函数会访问父类的构造函数*/
class Fu
{
/**构造函数*/
/**空参数的构造函数,子类构造函数默认访问这个,当手动建立带参数的构造函数时,
子类中的构造函数必须通过super语句指定访问父类的构造函数,否则编译失败,提示找不到构造函数*/
// Fu(int n) //使用这个,子类没有super语句指定时,编译失败
Fu()
{
System.out.println("Fu run");
}
}
class Zi extends Fu
{
/**构造函数*/
Zi()
{
// super(); //隐式的语句
// super(2); //当父类构造函数为Fu(int n)时,需使用此super语句指定访问父类的构造函数
System.out.println("Zi run");
}
}
class ExtendsDemo2
{
public static void main(String[] args)
{
Zi z = new Zi(); /**new 时,先加载Fu类,然后加载Zi类*/
}
复制代码
作者:
Huan220_欢
时间:
2015-7-1 22:03
复习了~~~
作者:
xuhao3622603
时间:
2015-7-1 22:10
看看,还行
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2