当前位置: 首页 > 编程日记 > 正文

java多态的理解

Java中多态性的实现

什么是多态

  1. 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。
  2. 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
  3. 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
  4. 多态的作用:消除类型之间的耦合关系。
  5. 现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

下面是多态存在的三个必要条件,要求大家做梦时都能背出来!

多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

多态是一种运行期的行为,不是编译期的行为。

 多态的好处

1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。


Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

 1 abstract class Animal {//父类
 2   private String name;//父类的方法:获取名字
 3   Animal(String name) {this.name = name;}
 4   /*
 5   public void enjoy(){ //父类方法:输出叫声
 6     System.out.println("叫声......");  
 7   }
 8   */
 9   public abstract void enjoy();
10 }
11 
12 abstract class Cat extends Animal {//子类Cat继承与父类Animal
13   private String eyesColor;//子类对父类方法的重写,要先重写 ,子类private的方法 
14   Cat(String n,String c) {super(n); eyesColor = c;}//调用父类name函数,和Cat的eyesColor
15   /*
16   public void enjoy() {//Cat对父类的“叫声......”表达不满意,重写父类enjoy方法 喵~~~~
17     System.out.println("猫叫声......");
18   }
19   */
20   //public abstract void enjoy();
21 }
22 
23 class Dog extends Animal {
24   private String furColor;//对父类重写,毛色
25   Dog(String n,String c) {super(n); furColor = c;}
26  
27   public void enjoy() {
28     System.out.println("狗叫声......");
29   }
30 }
31 
32 class Bird extends Animal {
33      Bird() {
34           super("bird");
35      }
36      public void enjoy() {
37     System.out.println("鸟叫声......");
38   }
39 }
40 
41 class Lady {
42     private String name;
43     private Animal pet;
44     Lady(String name,Animal pet) {
45         this.name = name; this.pet = pet;
46     }
47     public void myPetEnjoy(){pet.enjoy();}
48 }
49 
50 public class Test {
51     public static void main(String args[]){
52         Cat c = new Cat("catname","blue");//向下转型
53         Dog d = new Dog("dogname","black");
54         Bird b = new Bird();
55         //Lady l1 = new Lady("l1",c);
56         Lady l2 = new Lady("l2",d);
57         Lady l3 = new Lady("l3",b);
58        //l1.myPetEnjoy();
59         l2.myPetEnjoy();
60         l3.myPetEnjoy();
61     }
62 }

转载于:https://www.cnblogs.com/AceIsSunshineRain/p/5056521.html

相关文章:

2022-2028年中国高密度聚乙烯(HDPE)行业市场发展调研及投资前景分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高密度聚乙烯(HDPE)行业市场行业相关概述、中国高密度聚乙烯(HDPE)行业市场行业运行环境、…

计算机视觉图像处理机器学习压缩感知等论文代码大全

点击链接进入相关博文 1.来自西弗吉利亚大学li xin整理的CV代码合集 主要包括: 1.图像去噪,编码,去马赛克,超分辨,分割,去模糊,纹理合成,修复,质量评估等 2.视频编码和目…

Java 17 VS Java 8: 新旧对决,这些Java 17新特性你不容错过

Java是一门非常流行的编程语言,由于其跨平台性、可移植性以及强大的面向对象特性而备受青睐。Java最初由Sun Microsystems公司于1995年推出,随着时间的推移,Java发展迅速,版本不断更新。本篇博客将重点介绍Java 17与Java 8的对比,以及Java 17的新特性。

VirtualBox装ghost XP

在win7 professional 64上安装了virtualBox4.3.14 r95030 版本,之所以要安装这个vb,是因为刚升级的vm 打开之后很占用cpu, 网上又说vb不是很占用cpu而且是开源的, 于是就安装来试试, 但是以前没玩过, 哪知道安装个xp都…

【Java】常用的函数式接口(含示例)

Supplier接口被称为生产型接口:指定泛型是什么类型,接口的get()方法就会生产什么样的类型的数据。具体怎样消费、怎样使用这个数据呢?就由之后传入的Lambda表达式决定吧!与生产工厂Supplier相反,Consumer用来消费,即使用一个数据。具体生成一个怎样的数据?就由之后传入的Lambda表达式决定吧!转换的过程是怎样的呢?就由之后传入的Lambda表达式决定吧!具体根据什么判断呢?就由之后传入的Lambda表达式决定吧!对某种数据类型的数据进行判断,返回一个布尔值。

写实的CG人物角色制作学习教程

艺术站-制作欧比旺克诺比逼真的Cg角色 大小解压后:4.98G 含课程素材文件 1920X1080 .mp4 语言:英语中英文字幕(根据原英文字幕机译更准确) 信息: 欧比旺是我一直以来最喜欢的角色之一,所以有时间做这个3D人像真的很好…

Java学习总结:45(字符编码)

字符编码 在实际工作中最常见的4种编码如下: GBK、GB2312:中文的国标编码,其中GBK包含简体中文与繁体中文两种,而GB2312只包含简体中文; ISO8859-1:是国际编码,可以描述任何文字信息(中文需要转…

js实现双击后网页自己主动跑-------Day55

公司的界面设计环节总算是告一段落了,必需要承认的是,这段时间晚间的学习带给我非常多益处。在工作中偶尔的应用,效果出奇的好,收到领导和同事的一些小赞扬,表示非常欣慰,也长了点不少自信,尽管…

2022-2028年中国高等职业教育产业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高等职业教育行业市场行业相关概述、中国高等职业教育行业市场行业运行环境、分析了中国高…

「轻松支付,只需几步」使用 LeanCloud 云代码接入支付宝示例

如果你的应用想接入支付宝,让用户可以在应用内部直接支付,你可以看下这篇文档和开源项目,也许会给你带来一些帮助。 项目:https://github.com/leancloud/cloud-code-alipay 了解支付宝「即时到账收款」 在尝试该项目之前&#xff…

quartz定时任务开发cron常用网站

http://cron.qqe2.com/ cron表达式 只能看下5个时点http://www.cronmaker.com/ 能看500个时点https://unixtime.51240.com/unix时间戳 quartz定时任务开发常常需要用到一些工具。 如cron表达式的构造,绝对时间,时间戳的定位,单调的时候要看…

UE5使用MetaHuman构建超现实的角色

使用免费的MetaHuman创造者应用程序为虚幻构建超现实的角色。 流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,48.0 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确)|大小解压后:1.66 GB 含课程文件|时长:1h 49…

Java学习总结:46(内存流)

内存流 在Java中,针对内存操作提供了以下两组类: 字节内存流:ByteArrayInputStream(内存字节输入流)、ByteArrayOutputStream(内存字节输出流);字符内存流:CharArrayReader(内存字符输入流)、CharArrayWriter(内存字…

数据结构之shell排序

希尔排序是插入排序的一种类型&#xff0c;也可以用一个形象的叫法缩小增量法。基本思想就是把一个数组分为好几个数组&#xff0c;有点像分治法&#xff0c;不过这里的划分是用一个常量d来控制。 这个0<d<n,n为数组的长度。这个算法有了插入排序的速度&#xff0c;也可以…

2022-2028年中国高纯铜市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高纯铜行业市场行业相关概述、中国高纯铜行业市场行业运行环境、分析了中国高纯铜行业市场…

【百度地图API】如何制作班级地理通讯录?LBS通讯录

原文:【百度地图API】如何制作班级地理通讯录&#xff1f;LBS通讯录摘要&#xff1a;班级通讯录必备的功能&#xff0c;比如人员列表&#xff0c;人员地理位置标注&#xff0c;展示复杂信息窗口&#xff0c;公交和驾车等。一般班级人员都不会超过300个&#xff0c;因为可以高效…

Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)...

《Windows Azure Platform 系列文章目录》 注意&#xff1a;本文介绍的是Global Azure (http://www.windowsazure.com)&#xff0c;如果你使用的是由世纪互联运维的Azure China&#xff0c;请参考下面的连接。 Azure China (8) 使用Azure PowerShell创建虚拟机&#xff0c;并设…

如何正确的学习Blender-入门到精通课程

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |大小解压后:17.8 GB 含课程文件 |时长:21小时 27分 在Blender中学习3D建模、材质、灯光、渲染和动画&…

Java学习总结:47(打印流)

打印流 打印流包含字节打印流(PrintStream)和字符打印流(PrintWriter)。 例&#xff1a;定义打印流工具类 package Project.Study.PrintStream;import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream;class PrintUtil{ …

npm err错误

npm ERR!无法安装任何包的解决办法 通过config命令&#xff1a; npm config set registry http://registry.cnpmjs.org转载于:https://www.cnblogs.com/owys/p/5058463.html

2022-2028年中国高纯锑行业市场全景研究及发展趋势分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高纯锑行业市场行业相关概述、中国高纯锑行业市场行业运行环境、分析了中国高纯锑行业市场…

super返回不过来

class Fruit { String color "未确定颜色"; //定义一个方法&#xff0c;该方法返回调用该方法的实例 public Fruit getThis() { return this; } public void info() { System.out.println("Fruit方法"); …

使用Vuforia Unity构建增强现实应用

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:1.64 GB |时长:3h 36m 专门为特殊需求群体量身定制&#xff0c;他们隐藏的才能只需要揭开。 …

Java学习总结:48(System类对IO的支持)

System类对IO的支持 System类与IO有关的3个对象常量 No.常量类型描述1public static final PrintStream err常量显示器上错误显示2public static final PrintStream out常量显示器上信息输出3public static final IntputStream in常量键盘数据输入 我们最早使用的"Syste…

mac 端口转发方案

mac 端口映射 好坑 osx10.10mac移除了ipfw改用pfpf以前没用过 查文档mac的 pf语法&#xff0c;没有找到。bsd的倒是很全&#xff0c;心喜拿来一试。http://www.openbsd.org/faq/pf/rdr.html 试了bsd的几个example都不行。报语法错误pfctl: Syntax error in config file: pf rul…

2022-2028年中国钢轨探伤车行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国钢轨探伤车行业市场行业相关概述、中国钢轨探伤车行业市场行业运行环境、分析了中国钢轨探…

Java中的50个关键字

2019独角兽企业重金招聘Python工程师标准>>> Java中的50个关键字 关键字也称为保留字&#xff0c;是指java语言中规定了特定含义的标示符。对于保留字&#xff0c;用户只能按照系统规定的方式使用&#xff0c;不能自行定义。Java中有50个常用关键字&#xff1a; 与数…

javascript保留字

保留字不能被用作变量名或函数名。abstractbooleanbytecharclassconstdebuggerdoubleenumexportextendsfinalfloatgotoimplementsimportintinterfacelongnativepackageprivateprotectedpublicshortstaticsupersynchronizedthrowstransientvolatile注意&#xff1a;如果把关键字…

动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals

如何分类——动画产业基础 大小解压后&#xff1a;6.2G 含课程素材 1920X1080 mp4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 信息: 绘画技巧、解剖学、角色设计、透视和整体讲故事——这门为期6周的课程旨在聚焦于工作室正在寻找什么…

136. 只出现一次的数字(关于异或的使用)

136. 只出现一次的数字 给定一个非空整数数组&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 说明&#xff1a; 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗&#xff1f; 示例 1: 输入: [2…