Java面向对象(4) ——多态

目录

  • 多态的概念
  • 对象上下转型
  • 多态应用之打印机

多态的概念

多态是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果。比如:猫吃鱼、狗吃肉、人吃米饭。

多态存在的三个必要条件:

  • 需要存在继承(extends)或实现(接口)关系
  • 同样的方法调用而执行不同操作、运行不用代码(重写)
  • 在运行时父类或者接口的引用变量可以引用其子类的对象

多态的作用:

  • 多态通过分类做什么(eat)和怎么做(猫和狗eat不一样),从一个角度将接口和实现进行分离
  • 多态消除了类型之间的耦合关系
  • 多态的存在提高了程序的拓展性和后期的可维护性

例子:(直接点击运行提示缺少cat类,右击run as运行成功 why?)

//或者:abstract class Animal
class Animal
{String name;public void eat();//或者:abstract public void eat();	
}class Dog extends Animal
{public void eat(){//区分重写和重载System.out.println("狗啃骨头");}}class Cat extends Animal
{public void eat(){System.out.println("猫吃鱼");}
}public class Test {public static void main(String[] args){Animal an1 = new Dog();//在运行时父类或者接口的引用变量可以引用其子类的对象Animal an2 = new Cat();//属于下面讲的向上转型 子类向父类转	 an1.eat();an2.eat();}
}

对象上下转型

  • 由子类转型成父类,在继承图上是向上移动的,一般称为向上转型

  • 向上转型是从一个较专用类型向通用类型转换,所以总是安全的,也就是说,子类是父类的超集

  • 向上转型过程中,类接口中唯一可能发生的事情是丢失方法,而不是获取方法

  • 与之相反的操作是向下转型,不安全(可能需要instanceof操作符协助)

例子:

//或者:abstract class Animal
class Animal
{String name;public void eat();//或者:abstract public void eat();	
}class Dog extends Animal
{public void eat(){//区分重写和重载System.out.println("狗啃骨头");}}class Cat extends Animal
{public void eat(){System.out.println("猫吃鱼");}public void sleep(){System.out.println("猫睡觉");}
}public class Test {public static void main(String[] args){Animal an1 = new Dog();Animal an2 = new Cat();an1.eat();//an2.sleep();  向上转型丢失方法Cat cat1 = new Cat();//这样就不会丢失方法cat1.sleep();if(an1 instanceof Cat){ //instanceof通过返回值(布尔值)指出对象是否是特定类或是它的一个子类System.out.println("aa");}if(an2 instanceof Cat){System.out.println("bb");Cat cat2 = (Cat)an2;//类型强转,类似C语言cat2.eat();}}
}

运行结果:

狗啃骨头
猫睡觉
bb
猫吃鱼

多态应用之打印机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg 转换flv压缩大小_ffmpeg转换参数和压缩输出大小的比率 参考 最新版本FFMPEG...

https://blog.cnlabs.NET/3668.htmlffmpeg 转换压缩比例FFMPEG如果是压缩为FLV文件 3个编码可选1. -c:v flv 标准FLV编码 这个好处是速度快 清晰度高的话 视频文件会比较大2. -c:v vp6 VP6编码 这个大家都很少使用 其实这个也算不错3. -c:v libx264 H.264编码 估计使用这个的比…

Git 常用命令清单,掌握这些,轻松驾驭版本管理

GitHub 地址&#xff0c;欢迎star&#xff0c;查看更多整理的前端知识点 工程下载、分支的增删查改 工程下载&#xff1a; clone 远程工程&#xff1a;git clone https://XXXX.gitfetch 远程分支到本地某分支&#xff1a;git fetch origin <orginname>:<localname>…

【运维囧事】运维的苦乐之旅

人生就是一段充满苦与乐的旅程&#xff0c;在人生当中有痛苦也有欢乐&#xff0c;痛苦不一定是负面的&#xff0c;有的时候还会使你进步&#xff0c;增强应变能力。对一般人而言&#xff0c;人生一定要是快乐的才是有意义的&#xff0c;可是你仔细想想&#xff0c;有谁不是因为…

ubuntu下网易云音乐适配高分辨率屏幕

0x0 环境 ubuntu20处理器 AMD 我主流工作环境是Ubuntu20&#xff0c;而且很依赖音乐&#xff0c;网易云音乐适配了Ubuntu&#xff0c;而最近我换了个4K屏幕 开机启动网易云音乐后发现界面文字变得很小完全没法看&#xff0c;如下图 分析发现网易云音乐是通过 /opt/netease/ne…

Java基础 —— 异常

目录异常的概念及分类异常的处理try-catch-finally异常抛出throw(s)自定义异常异常的概念及分类 什么是异常 异常是指在程序的运行过程中发生的一些不正常事件。比如&#xff1a;除0溢出、数组下标越界、所要读取的文件不存在。 异常导致的后果 项目JAVA程序的执行过程中如出现…

excel函数去重_excel去重函数

在日常工作问题中&#xff0c;经常会遇到一个问题&#xff0c;当你呼哧呼哧处理了大半天的数据后才发现&#xff0c;原始数据好多重复的&#xff0c;导致你得到的结果全部错误……顿时&#xff0c;想砍人的心都有了&#xff0c;心理阴影面积无穷大……当然&#xff0c;胖斯基也…

解决网站请求速度慢的一些方法

开门见山&#xff0c;网站请求反应速度慢首先考虑服务器问题。 我在开发中遇到的就是服务器实例限制cpu占用10%以内访问正常&#xff0c;超出则限制访问速度&#xff0c;也就是网站请求速度慢 具体和阿里工程师聊天截图如下&#xff1a; 按照对方说的&#xff0c;升级了相关配置…

Windows Server 2012 在个人终端上使用的推荐设置

Windows Server 2012&#xff0c;也就是 Windows 8 的服务器版本&#xff0c;相对于 Windows 8 企业版而言&#xff0c;增强了作为服务器的功能&#xff0c;弱化了作为终端系统的功能。   目前微软官方提供了 Windows 8 企业版&#xff08;90 天评估期&#xff09;和 Windows…

解决crontab 定时任务加载失败

0x0 系统&#xff1a;centos7内核&#xff1a;3.10.0-1160.15.2.el7.x86_64 今天用crontab创建定时任务&#xff0c;在测试时发现任务并没有按预期执行&#xff0c; 使用systemctl status crond 查看crond的状态 > # systemctl status crond …

Java高级 —— 泛型

目录泛型概念泛型可设置多个类型参数泛型继承泛型接口限制泛型可用类型泛型通配声明泛型方法泛型方法限制泛型可用类型泛型概念 问题引入&#xff1a;如果我们需要产生多个对象&#xff0c;每个对象的逻辑完全一样&#xff0c;只是对象内的成员啊变量的类型不同。那我们如何去…

python显示目录中的文件_Python中的文件和目录操作实现

Python中的文件和目录操作实现对于文件和目录的处理&#xff0c;虽然可以通过操作系统命令来完成&#xff0c;但是Python语言为了便于开发人员以编程的方式处理相关工作&#xff0c;提供了许多处理文件和目录的内置函数。重要的是&#xff0c;这些函数无论是在Unix、Windows还是…

wopihost

项目介绍 基于wopi协议开发的WopiHost, 支持word, excel&#xff0c;ppt(仅支持预览)等文档的预览和编辑。 运行环境 需要安装Office online 2016才可以使用&#xff0c;基于jdk 1.8&#xff0c;spring boot开发。 使用案例 word文档预览 http://[owas.domain]/wv/wordviewerfr…

java 人物属性

写代码&#xff0c;可以浏览人物的属性&#xff1a;package day14; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JComboBox; im…

龙芯3a4000 交叉编译链接错误

0x0 交叉编译平台&#xff1a; amd ubuntu20交叉编译目标平台&#xff1a;LOONGSON 3A4000交叉编译器&#xff1a;7.3.1 在编译时出现如下报错&#xff1a; mips-linux-gnu-ld -r -Lmips-loongson3a-app-gcc/lib -o octeontx_fpavf.o.o octeontx_fpavf.o.pmd.o octeontx_fp…

安卓APP_ Fragment(5)—— Fragment + ViewPager2 模拟微信首页 (2)两者联动翻页

摘自&#xff1a;安卓APP_ Fragment&#xff08;5&#xff09;—— Fragment ViewPager2 模拟微信首页 &#xff08;2&#xff09;两者联动实现翻页 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-22 00:11:43 网址&#xff1a;https://blog.csdn.net/weixin_4474…

stmmac描述符的结构和初始化

stmmac 描述符&#xff08;Descriptors&#xff09; stmmac的描述符有两个个模式&#xff0c;分别是ring模式和chain模式&#xff0c;根据特性的不同支持&#xff0c;描述符又有以下3个形式norm、Alternate 、 Enhanced。下面主要讲下ring模式下的Enhanced描述符结构&#xff…

Android中利用productFlavors配置多渠道

build.gradle(app)设置 android {flavorDimensions "default"productFlavors{//不同渠道360{dimension "default"//替换AndroidManifest中的值manifestPlaceholders [channel_value:"360"]}qq{dimension "default"//替换AndroidManif…

Ubuntu服务器安装snmpd(用于监控宝)

2019独角兽企业重金招聘Python工程师标准>>> 一、安装snmpd&#xff1a; sudo apt-get install snmpd 二、修改配置文件 vi /etc/snmp/snmpd.conf 找到这样的两行 agentAddress udp:127.0.0.1:161 #agentAddress udp:161,udp6:[::1]:161 将他们的注释交换一下 #…

安卓APP_ 四大基本组件(1)—— Activity

摘自&#xff1a;安卓APP_ 四大基本组件&#xff08;1&#xff09;—— Activity 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-04-22 15:56:18 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/116006048 配合菜鸟教程食用效果更佳&#xf…

bootdefault和configuration_springboot常用注解、包引入和自动配置功能解读

springboot使用起来确实很方便&#xff0c;做到开箱即用&#xff0c;减少了许多繁琐的配置。不过在使用过程中时常会想&#xff0c;为啥会这样方便&#xff0c;springboot为我们做哪些工作。或者是我们在使用的过程中&#xff0c;会遇到springboot不满足的情况&#xff0c;我们…