Java 动态绑定
接下来,我们准备为大家介绍“动态绑定”。
动态绑定:当对象调用一个方法时,系统会首先在当前对象所对应的类中查找对应的方法,
如果,没有找到,就会向子类的父类中查找,
如果,还是没有找到就继续往上一层的父类查找,直到找到为止,
一旦找到一个对应的方法,则停止查找,并立即调用该方法。
接下来,我们结合例子作进一步的学习。
例子:
//----------------------------------------------------------------------------------------------//
//定义了wp类
//----------------------------------------------------------------------------------------------//
class wp
{
int wpx; //定义了属性wpx
wp() //构造函数wp
{
wpx = 0;
}
void mx() //定义了mx方法
{
wpx = wpx + 1;
}
}
//----------------------------------------------------------------------------------------------//
//定义了Gun类,并继承了父类wp
//----------------------------------------------------------------------------------------------//
class Gun extends wp
{
int gx;
Gun //构造函数
{
gx = 0;
}
void mx() //对父类中的mx方法进行了重新的实现,即在子类中覆盖了父类的mx方法。
{
gx = gx + 2;
}
}
//----------------------------------------------------------------------------------------------//
//定义了ShotGun类,并继承了父类Gun
//----------------------------------------------------------------------------------------------//
class ShotGun extends Gun
{
int sgx;
ShotGun //构造函数
{
sgx = 0;
}
}
//----------------------------------------------------------------------------------------------//
//Mytest类是在第二章“Java开发环境搭建(2)” 学习时创建的
//----------------------------------------------------------------------------------------------//
public class MyTest
{
public static void main(String[] args) //入口方法main
{
wp p1= new wp(); //定义了对象p1
Gun g1 = new Gun(); //定义了对象g1
ShotGun sg1 = new ShotGun(); //定义了对象sg1
test ( sg1 ); //传递了sg1对象作为参数,而它是ShotGun类的对象,
所以,test方法中的w1所调用的方法应该是ShotGun类中的mx方法,
但是,ShotGun类中并没有这个mx的方法,
所以,系统就会继续从它的父类Gun中查找,而父类Gun中刚好有mx方法,
所以,就调用了Gun类中的mx方法。
test ( p1 ); //传递了p1对象作为参数,而它是wp类的对象,
所以,test方法中的w1所调用的方法是wp类中的mx方法。
test ( g1 ); //传递了g1对象作为参数,而它是Gun类的对象,
所以,test方法中的w1所调用的方法是Gun类中的mx方法。
}
//定义了方法test,参数是wp类所定义的对象w1,而方法中通过参数w1去调用方法mx,
而具体要调用父类还是子类中的mx方法,就要看具体的参数是传递wp的对象还是传递Gun的对象了。
public static void test( wp w1 )
{
w1.mx();
}
}
非常好,现在,我们已经掌握了Java中的“动态绑定”这个知识点,但是,如何去运行用它呢?所以,我们就要通过下方的按钮进入到游戏中,然后,运用它去完成任务,这样,才可以加深大家对每个知识点的理解和运用,以及“尽快进入到编程的状态”。
不要停留在理论规则上面,快动起来吧!
(通过游戏模式学习与训练,需要在电脑上运行)