Java基础14-多态(思想、转型、instanceof)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java基础14-多态(思想、转型、instanceof),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1603字,纯文字阅读大概需要3分钟。
内容图文
一、什么是多态?
1.多态的定义
多态,字面意思就是多种状态,他表示一种事物的多种状态。
class Animal{ public void eat() { System.out.println("吃一般的食物"); } } //狗和猫类继承动物类并重写eat方法class Dog extends Animal{ publicvoid eat() { System.out.println("吃骨头"); } } class Cat extends Animal{ publicvoid eat() { System.out.println("吃鱼"); } } publicclass duotai { publicstaticvoid main(String[] args) { //当代码变为一下样子多态就产生了 Animal a=new Dog(); a.eat(); a=new Cat(); a.eat(); } }
上边对象a具有两种类型
编译类型:声明对象变量的类型,Animal表示把对象看出什么类型
运行类型:对象的真实类型,Dog运行类型 对象的真实类型
编译类型必须是运行类型的父类或相同
当编译类型和运行类型不同的时候,多态就出现了
所谓多态:对象具有多种形态,对象可以存在不同的形式。
其实就是,我们创建了一个动物对象,这个动物对象即可以是猫,也可以是狗,是猫的时候吃鱼,是狗的时候吃骨头。
Animal a=new Dog() //此时a表示Dog类型的形态
a=new Cat() //此时a表示Cat类型的形态
2.多态的前提和特点
多态的前提:必须有继承关系(错误的说法)
可以是继承关系,也可以是实现关系(接口和实现类)。正确
多态的特点:
把子类对象赋给父类变量,在运行时期会表现出具体的子类特征
2.多态的好处
假设我们目前有这样的需求,给饲养员提供一个喂养动物的方法,用于喂养动物
没有多态, 针对不同类型的动物,我们要提供不同的feed方法来喂食,非常繁琐,不够简洁。
那怎样才能只提供一个方法就可以统一喂养所有动物?
这就是多态的好处
把不同的子类对象当做父类类型来看待,可以屏蔽不同子类对象之间的实现差异,从而写出通用的代码的代码达到通用编程,以适应需求的不同变化、
提高了代码的扩展性
二、多态的转型
1.向上转型
l当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。
2.向下转型
一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。如果是直接创建父类对象,是无法向下转型的!
运行报错,因为我们无法将猫转换成狗
那什么时候使用向上转型呢?
当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。
如:Animal a = new Dog();
a.eat();
l什么时候使用向下转型?
当要使用子类特有功能时,就需要使用向下转型。
如:Dog d = (Dog) a; //向下转型
d.lookHome();//调用狗类的lookHome方法
l向下转型的好处:可以使用子类特有功能。
弊端是:需要面对具体的子类对象;在向下转型时容易发生ClassCastException类型转换异常。
那怎么解决这个弊端呢?
3.instanceof关键字
当发生以上这种情况时,我们就需要用到instance of这个关键字
instanceof 判断对象是否是某一个类的实例
* 语法格式: boolean b= 对象A instance of 类B
* 判断A对象是否是B对象的实例
原文:https://www.cnblogs.com/LuckyGJX/p/8973350.html
内容总结
以上是互联网集市为您收集整理的Java基础14-多态(思想、转型、instanceof)全部内容,希望文章能够帮你解决Java基础14-多态(思想、转型、instanceof)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。