面向对象之继承

面向对象之继承

java虽然不支持多继承,但是支持多实现(interface)和多层继承(A继承B,B继承C)
 
子类方法覆盖父类方法必须保证子类方法权限大于等于父类方法权限
 
子父构造函数
 
1:是否能继承
子类不能继承父类的构造函数,不存在这个概念
 
2:是否能覆盖父类的构造函数
不存在覆盖,覆盖要求函数名和返回值一致,只存在参数的不同,而子父的构造函数名都不一样,所以不存在覆不覆盖的问题
 
3:为啥在进行子类初始化时,会调用父类的构造函数
在子类进行初始化时(new Zi())时,子类构造函数会默认访问父类的空参构造函数,即在子类所有构造函数的第一行jvm默认调用了super();
 
4:如果父类中手动定义了带参数构造函数,new 子时会出现什么情况
会报错,因为子类构造函数会默认调用父类空参构造函数,而此时父类中定义了带参构造函数fu (int x),因此系统默认的空参构造函数fu ()则不存在了,
因此必须手动在父类中写一个空参构造函数或者在子类构造函数的第一行手动调用父类的带参构造函数super(x);
 
5:子类为啥一定要访问父类的构造函数
子类继承了父类的成员变量和方法,子类在初始化时必须要知道父类对这些成员变量进行了哪些初始化操作,所以必须要访问父类的构造函数。
 
6:如果在子类构造函数中调用了其它带参构造函数会如何
没有任何问题,子类空参构造函数中第一行手动调用了this(x),哪么空参构造函数中系统就不会调用super()了,这个是没有问题的,因为this(x)最终调用到了zi (int x)中,而这个带参函数的第一行默认是调用super()的,所以空参构造函数还是访问了父类构造函数,构造函数中this()或super()都必须写在第一行。