javaoop_第三章_多态(3)

本文详细介绍了Java中多态的概念及其实现方式。包括多态性的三个必要条件:继承关系、方法重写以及父类引用指向子类对象。此外还探讨了多态带来的好处及其在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、多态性的三个必要满足的条件
1、存在继承关系
Cat类继承了Animal类
2、子类要重写父类的方法
子类重写(override)了父类的两个成员方法eat(),sleep()。其中eat()是非静态的,sleep()是静态的(static)。
3、父类数据类型的引用指向子类对象。
测试类Demo_Test1中 Animal am = new Cat();语句在堆内存中开辟了子类(Cat)的对象,并把栈内存中的父类(Animal)的引用指向了这个Cat对象。
到此,满足了Java多态的的必要三个前提。


二、多态性是指一个名称可以对应多种不同的实现方式。Java的多态性体现在两个方面:编译多态和运行多态。


编译多态是指在程序编译过程中体现出的多态性,如方法重载,尽管方法名相同,但由于参数不同,在调用时系统根据传递参数的不同确定被调用的方法,这个过程是在编译时完成的 


运行多态则是有类的继承和方法的重写引起的,由于子类继承了父类的属性和方法,因此,凡是父类对象可以使用的地方,子类对象也可以使用。 


例如类A和类B,可以直接生成子类B的对象,并将该引用赋给父类A的对象。 
A a=new B(); 
等价于 
B b=new B(); 
A a=b;//隐式类型转换 


三、多态的好处:可替换性、可扩充性、接口性、灵活性、简化性。


四、父类对象真实的指向什么类型才能转换成什么类型。


五、使用instanceof运算符时,对象的类型必须和instanceof的第二个参数所指定的类或接口在继承树上有上下级关系,否则会出现变异错误。如:pet instanceof String 会出现编译错误.
instanceof通常和强制类型转换结合使用.


六、instanceof
子类转换为父类,向上转型会自动转换。
父类转换为子类,向下转型 使用 ·instanceof  判断是否是父类与子类
class A{
public void paly (Pet pet) {
if ( pet instanceof Dog) {
Dog dog =  (Dog) pet ;//向下转型 进行强制转换。
}else if ( pet instanceof Penguin ) {
Penguin pe = (Penguin)pet ;
}else if ( pet instanceof Cat) {
Cat  cat = (Cat)pet ;
}
}
}
class B {
A  a = new A ();
a.paly(Dog);
}


什么时候会产生多态  
a. 有继承关系的时候会产生多态
b. 方法重写的时候




当进行数据转换的时候,会丢失数据 , 可以是:
当子类转换为父类时 , 会丢失子类特有的方法和属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值