(7)继承和构造方法的关系:
A.要想初始化子类,必选先初始化父类
B.因为子类会继承父类的数据,甚至可能会使用父类的数据 ,所以在子类初始化之前,一定会先完成父类的初始化 。
C.注意:每个子类的构造方法的第一句话默认是super().
eg:
class Father3 { int age; Father3() { System.out.println("父类中的无参构造方法"); } Father3(String s) { System.out.println("这是父类带参数的构造方法" + s); } } class Son3 extends Father3 { Son3() { //super(); 每个子类的构造方法的第一句话默认是super().调用父类无参构造方法 System.out.println("子类的无参构造方法"); } Son3(String s) { //super(); 每个子类的构造方法的第一句话默认是super().调用父类无参构造方法 System.out.println("子类带参数的构造方法" + s); } } public class InheritanceConstructor { public static void main(String[] args) { Son3 s = new Son3("zkf"); } }
D.当父类中没有无参构造方法的时候:
a.使用super关键字带参数的形式访问父类的带参数构造方法。
b.子类通过this关键字调用本类的其他构造方法。
注意,本类其他构造方法也必须可以访问父类拥有的构造方法
使用this关键字间接的调用父类的构造方法
无论在哪里调用父类的构造方法,只要最后保证在子类构造方法内容执行之前完成了父类的初始化就可以了 。
c.super(..)或者this(..)必须出现在第一条语句上,否则就会出现父类的数据进行了多次初始化 。(重点)每个类只能初始化一次
eg:
class Father4 { int age; Father4(String s) { System.out.println("这是父类带参数的构造方法" + s); } } class Son4 extends Father4 { Son4() { super("xxx"); System.out.println("子类的无参构造方法"); } Son4(String s) { this(); System.out.println("子类带参数的构造方法" + s); } } public class InheritanceConstructor2 { public static void main(String[] args) { Son4 s = new Son4("xxx"); } }
(8)继承和成员方法的关系:
A.当子类的成员方法名与父类成员方法名不一样的时候,该调用谁就调用谁的。
B.当子类的成员方法名与父类成员方法名一样的时候,怎么办呢?(就近原则)。
a.现在本类中查找,如果有就调用,如果没有去父类中查找;
b.如果父类中有方法,就调用父类的 ;
c.如果连父类中都没有要调用的方法名,报错,提示找不到方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)