一、动态绑定(迟绑定)
动态绑定:使用父类引用指向子类对象,可以带来比较不错的可扩展性,在方法的参数里面定义父类的引用,在对方法的使用过程中传子类的引用,并在执行期间(非编译期)在方法中判断该引用属于哪个子类,并根据其实际的类型调用其相应的方法。
动态绑定的内存图:
根据方法的实际参数中的对象类型来进行接下来的操作。
二、多态
多态的存在的三个必要条件:继承、重写、父类引用指向子类对象。
当调用父类中被重写的方法时,实际new的是哪个子类对象,就调用哪个子类对象中的方法。
三、抽象类
当一个子类继承一个抽象父类,父类中的抽象方法无法重写,则将该抽象方法复制到子类中,并将该子类声明为抽象类。或者对于不想实现的抽象方法,不copy抽象方法,直接将该类变成抽象类也行。
抽象类无法进行实例化,只能用来被继承;抽象方法必须被重写。
abstract总结:
1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
2、抽象方法必须由子类来进行重写。
3、只要包含一个抽象方法的类,该类必须要定义成抽象类,不管是否还包含有其他方法。
4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
5、abstract不能与final并列修饰同一个类。
6、abstract 不能与private、static、final或native并列修饰同一个方法。
四、final关键字
final关键字--只读的。
public void m(final int j){
//j = 9; error 当传进来是一个final定义的变量,则该变量在方法中的值不能被改变
}
博客引用马士兵Java基础教程中的PPT,如有侵权,请联系删除,谢谢!