一、定义
多态是面向对象的核心。
也叫动态绑定,是指在执行期间(而非编译期间)判断所引用对象的实际类型,并根据引用对象的实际类型来调用相应的方法。
二、必要条件
1.必须有继承;
2.子类必须重写父类的方法;
3.必须有父类引用指向子类对象。
三、内存图解析
1.要点说明:
a. new子类对象时,子类对象中会包着一个父类对象;
b. lady对象中有个Animal类型的变量,实际在new lady,并且为其设置cat值时,该变量会指向cat对象。
c. 在调用lady的pet的“叫”方法时,实际所有的方法都在code seg区域,而pet对象中有个指针会判断该引用的实际类型,并指向该类型对象的方法,即动态绑定。
图片发自简书App
图片发自简书App
四、意义
多态是面向对象的核心,极大的提高了可扩展性(有变动时,不用修改代码)。
例子中,lady的pet是Animal类型,调用pet的“叫”方法时,不用判断Animal的实际类型,来决定调用的方法,多态机制会自动判断实际类型来选择调用的方法。