标签:关系 访问 引用 讲解 功能 实例 值类型 重要 最好
1.继承中构造方法的关系
1.子类中所有的构造方法默认都会访问父类中空参数的构造方法,除非显式使用super/this调用了父类或者是本类的其他构造方法。
2.在类中对本类或者是父类构造方法的调用,只能是在构造方法中,不能在实例方法中调用构造方法(更不能在类方法中调用构造方法),原因:
2.
因为子类会继承父类中的数据(成员变量),可能还会使用父类的数据。
所以,子类初始化之前,一定要先完成父类数据的初始化。
换句话说,一个对象的创建意味着它的所有的父类都会被创建出来。
3.子类构造方法的第一条语句:
如果是this(...)表明调用的是本类的另一个构造方法,在另一个构造方法中还可以继续使用this(...)调用本类其他的构造方法,如果有多个构造方法的话,可以继续调用下去,但是不能递归调用,最终总会有一个构造方法,第一条语句不是this()了。
这时,可以显式的调用父类的构造方法super(...);或者什么都不写,这时系统默认调用父类的空参构造方法。
总之,当子类对象被创建的时候,总是会先调用父类的构造方法,直到Object这个最上层的对象被创建出来之后,其下的子类对象才会被创建出来。
4.考察父类,子类代码块的执行顺序
从这个案例中能看到有继承关系的类的实例初始化的过程,以及为什么在类方法中不能使用this或者是super关键字
5.如果父类中没有空参构造方法,怎么办?
1.子类可以通过super去显式调用父类其他的带参的构造方法
2.子类可以通过this去调用本类的其他构造方法,但是本类其他构造也必须首先用super(...)访问了父类的带参构造(因为父类没有空参构造)
6.总结
如果父类没有空参构造,子类的构造方法中就必须显式调用父类带参构造super(...);
一定要注意:
super(…)或者this(…)必须出现在构造方法第一条语句上
否则,就会有父类数据的多次初始化
7.如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢?
报错。
如何解决呢?
A:在父类中加一个无参构造方法
B:通过使用super关键字去显示的调用父类的其他带参构造方法
C:子类通过this去调用本类的其他构造方法
子类中一定要有一个去访问了父类的构造方法,否则父类数据就没有初始化。
注意事项:
this(...)或者super(...)必须出现在第一条语句上。
如果不是放在第一条语句上,就可能对父类的数据进行了多次初始化,所以必须放在第一条语句上。
8.继承中成员方法的关系
子父类中存在同名和不同名的成员方法
结论:
通过子类对象去访问一个实例方法
首先在子类中找(是否子类进行了重写,或者是子类特有的方法)
然后在父类中找(子类没重写,而是从父类继承而来的)
9.继承中成员方法的关系:
A:子类中的方法和父类中的方法声明不一样,这个太简单。
B:子类中的方法和父类中的方法声明一样,这个该怎么?
通过子类对象调用方法:
a:先找子类中,看有没有这个方法,有就使用
b:再看父类中,有没有这个方法,有就使用
c:如果没有就报错。
10.方法重写概述
方法重写概述
称为方法覆盖Override/重写OverWrite
使用特点:
方法重写的应用:
11.方法重写的注意事项
(重写方法的一个重要用途就是:父类的引用能够指向子类的方法,但是静态方法的“重写”,在多态中依然调用的是父类的方法,所以,从这个角度上来讲,子类对父类的静态方法的重写不能算是真正方法的重写)
12.方法重写的注意事项
A:父类中私有方法不能被重写
因为父类私有方法子类根本就无法继承
B:子类重写父类方法时,访问权限不能更低,最好就一致
C:父类静态方法,子类也必须通过静态方法进行重写
其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中讲解
子类重写父类方法的时候,最好声明一模一样。
否则同名的方法就是方法的重载了,就必须让形参列表不同
标签:关系 访问 引用 讲解 功能 实例 值类型 重要 最好
原文地址:http://www.cnblogs.com/xiejiajun/p/6618796.html