java中多态的使用

多态:在继承/实现情况下的一种现象,表现为对象多态,行为多态

多态的前提:

有继承和实现的关系:存在父类和引用子类来进行创建对象,有进行方法重写使不同对象拥有不同效果的同一个属性

多态的注意事项:

多态指的使是对象,行为的多态。

JAVA中的属性(成员变量)不谈多态

.................................

people p1=new Student();

people p2=new Teacher();

p1.run();//行为多态,编译看左边,执行看右边

p2.run();//行为多态,编译看左边,执行看右边

System.out.println(p1.name);//输出父类的people的名称

System.out.println(p2.name);//输出父类的people的名称

左右边指在创建对象时的左右边代码类

于变量的执行:

编译看左边:

执行看左边

对于行为的多态:

编译看左边

运行看右边

对象产生代码时左边即创建对象的实际构造器;右边即在父类(左边构造器下)产生的小类型

对于变量的执行:编译看左边:

执行看左边:对象的属性(成员变量)由此多态不包括成 员变量的多态

在上面例子中:print 变量的属性时

编译看的是people类;执行的时候看的还是people类

-------------------------------------

对于行为的多态:编译看左边类的代码,运行看右边类的代码

在上面例子中:编译指看的people类,执行的时候看的是 teacher/student;由此才产生了多态

----------------------------------------

使用多态的好处:多态的好处:便于拓展和维护

在多态的形式下,右边对象时解耦合的,更便于拓展和维护

people p1=new Student();

如peolple是父类而右边Student是子类

当对于s1如果需要不同的功能的切换,可以直接进行将Student(子类)进行切换,这样可以直接对功能的转换

定义方法时,使用父类类型的形象(形参),可以接受一切子类对象,拓展性更强,更便利。

如定义

多态的缺点:

在多态的状态下是不能够直接使用子类的独有功能

在直接进行使用对象的独有功能方法时会报错

所以多态不能够直接使用子类的单独功能

可以直接使用父类和子类都具有的如例子中的run方法

解决多态中不能直接调用子类单独功能(方法)的问题:

解决:

-----使用类型的转换:多态对象的命名时自动类型的转换

如:people p=new Student/Teacher;

强制类型的转换: 子类 变量名=(子类)父类变量

如:people p=new Student/Teacher;//多态对象的构建

强制类型转换的注意事项:

在进行强转时可以使用instanceof关键字来进行判断处理

具体操作:

创建p对象子类为Student用instanceof关键字来进行判断要转换的具体目标(这时在if条件中可以出现其他类名,关键在于if,else的代码书写)

为了便于检验的方便可以创建一个方法来将此代码放于方法中进行使用

为了能够将所有子类对象都能够进行一个转换父类的名称 +形参的名称

具体看上面介绍多态的好处

--------

存在继承/实现关系就可以在编译阶段进行强制类型的转换,编译阶段不会报错

运行时,如果发现对象的真实类型于强转后的类型不同,就会报类型错误的转换(ClassCastException)

即子类之间不能进行强转:

指的是,在创建多态对象2个不同子类下

在进行强转时新类型要与原来的子类相同

该图为正确的强准编译和执行都不会报错

...............................

即此图转换时是错误的

如果发现对象的真实类型于强转后的类型不同,就会报类型错误的转换(ClassCastException)

...............

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值