面向对象特征三-多态性

面向对象的特征:多态性


1.多态性的理解:可以理解为一个事物的多种形态。
2.广义上多态性的体现:
方法的重载和重写;子类对象的多态性


3.狭义上多态性的体现:
子类对象的多态性
4.何为子类对象多态性:
将子类的实例赋给父类的引用(或父类的引用指向子类的实例
举例:
Person p = new Man();
Object obj = new String("Hello");
Number n = new Integer(122);
5.多态性的应用:虚拟方法调用 (动态绑定
编译时,对象的引用只能调用声明为父类的类型中的方法,但是当运行时,实际执行的是子类重写的方法。


总结:编译看左边,运行看右边。


6.多态性的说明:
多态性,只适用于方法,不适用于属性。


class Person{
int id = 1001;
public void eat(){}


}


class Student extends Person{
int id = 1002;
public void eat(){}
}
class Test{
main(){
Person p = new Student();//多态
p.eat();//虚拟方法调用
sysout(p.id);//1001

Student s = (Student)p;
sysout(s.id);//1002


sysout(p == s);//true
}
}


7.多态性使用的前提:
①类的继承性  ②方法的重写
**************************************************


8.关于向上转型与向下转型:
向上转型:多态
向下转型:
8.1为什么使用向下转型:
使用多态以后,创建的是子类的对象,意味着在内存空间中存在子类特的结构:属性、方法。但是编译看左边,导致我们通过父类的引用没法调用子类特的结构。此时,需要使用向下转型,方可实现对子类特有的结构的调用。
8.2如何实现向下转型:使用强转符:()
8.3 instanceof的使用:
为了避免在强转时出现ClassCastException,建议强转前使用instanceof进行判断,如果返回true,再强转。
a instanceof A:判断对象a是否是类A的实例。
1.如果a是类A的实例:返回true;如果a不是类A的实例:返回false.
2.如果返回值是true,那么 a instanceof B返回值也是true.其中类B是类A的父类。
图示:


需要注意的问题:
1.强转前,使用instanceof进行判断,避免出现ClassCastException
2.强转符只适用于子父类关系的类之间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值