JAVA特性多态详解.ppt

1、多态(polymorphism),多态的运行机制所谓“绑定(binding)”,就是建立methodcall(函数调用)和methodbody(函数本体)的关联。如果绑定动作发生于程序执行前(由编译器和连接器完成),称为“先期绑定”。对于面向过程的语言它们没有其他选择,一定是先期绑定。比如C编译器只有一种methodcall,就是先期绑定。(C+有先期联编和后期联编),当有多态的情况时,解决方法便是所谓的后期绑定(latebinding):绑定动作将在执行期才根据对象型别而进行。后期绑定也被称为执行期绑定(run-timebinding)或动态绑定(dynamicbinding)

3、把Feeder、Animal和Food都看成独立的子系统。Feeder类的定义如下:publicclassFeederpublicvoidfeed(Animalanimal,Foodfood)animal.eat(food);以下程序演示一个饲养员分别给一只狗喂肉骨头,给一只猫喂鱼。Feederfeeder=newFeeder();Animalanimal=newDog();Foodfood=newBone();feeder.feed(animal,food);animal=newCat();food=newFish();feeder.feed(animal

4、,food);,/给狗喂肉骨头,/给猫喂鱼,多态,Java语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换:Animalanimal=newDog();Dogdog=(Dog)animal;Creaturecreature=animal;如图2所示,如果把引用变量转换为子类类型,称为向下转型,如果把引用变量转换为父类类型,称为向上转型。在进行引用变量的类型转换时,会受到各种限制。而且在通过引用变量访问它所引用的实例的静态属性、静态方法、实例属性、实例方法,以及从父类中继承的方法和属性时,Java虚拟机会采用不同的绑定机制。,/向下转型,把Animal

5、类型转换为Dog类型,/向上转型,把Animal类型转换为Creature类型,多态,图2类型转换,多态,下面通过具体的例子来演示多态的各种特性。在下面的例程中,Base父类和Sub子类中都定义了实例变量var、实例方法method()、静态变量staticVar和静态方法staticMethod(),此外,在Sub类中还定义了实例变量subVar和subMethod()。Sub.javapackagepoly;classBaseStringvar=BaseVar;staticStringstaticVar=StaticBaseVar;voidmethod()Syst

6、em.out.println(Basemethod);staticvoidstaticMethod()System.out.println(StaticBasemethod);,/实例变量,/静态变量,/实例方法,/静态方法,多态,publicclassSubextendsBaseStringvar=SubVar;/实例变量staticStringstaticVar=StaticSubVar;/静态变量voidmethod()/覆盖父类的method()方法System.out.println(Submethod);staticvoidstaticM

9、r=“123”;/编译出错,提示在Base类中没有subVar属性who.subMethod();/编译出错,提示在Base类中没有subMethod()方法如果要访问Sub类的成员,必须通过强制类型的转换:BasewhonewSub();/who是Base类型(Sub)who).subVar=123;/编译成功,把Base引用类型强制转换为Sub引用类型(Sub)who).subMethod();/编译成功,把Base引用类型强制转换为Sub引用类型,多态,Java编译器允许具有直接或间接继承关系的类之间进行类型转换.对于向上转型,不必使用强制类型转换,因为子类的对象肯定也

10、可看作父类的对象。例如一个Dog对象是一个Animal对象,也是一个Creature对象,也是一个Object对象:Dogdog=newDog();Creaturecreature=dog;/编译成功,把Dog引用类型直接转换为Creature引用类型Objectobject=dog;/编译成功,把Dog引用类型直接转换为Object引用类型对于向下转型,必须进行强制类型转换:Creaturecreature=newCat();Animalanimal=(Animal)creature;/编译成功,把Creature引用类型强制转换为Animal引用类型Catca

11、t=(Cat)creature;/编译成功,把Creature引用类型强制转换为Cat引用类型Dogdog=(Dog)creature;/编译成功,把Creature引用类型强制转换为Dog引用类型,多态,假如两种类型之间没有继承关系,即不在继承树的同一个继承分支上,那么Java编译器不允许进行类型转换,例如:Dogdog=newDog();Catcat=(Cat)dog;/编译出错,不允许把Dog引用类型转换为Cat引用类型(2)对于一个引用类型变量,运行时Java虚拟机按照它实际引用的对象来处理。例如以下代码虽然编译可以通过,但运行时会抛出ClassCastExcepti

12、on运行时异常:Basewho=newBase();/who引用Base类的实例Subs=(Sub)who;/运行时抛出ClassCastException在运行时,子类的对象可以转换为父类类型,而父类的对象实际上无法转换为子类类型。因为通俗的讲,父类拥有的成员子类肯定也有,而子类拥有的成员父类不一定有。,多态,假定Java虚拟机能够把子类对象转换为父类类型,那么以下代码中的sub.subMethod()方法无法执行:Basewho=newBase();/who引用Base类的实例Subsub=(Sub)who;/假定运行时未出错sub.subMethod();/s

13、ub引用变量实际上引用Base实例,而Base实例没有subMethod()方法由此可见,在运行时,Java虚拟机无法把子类对象转变为父类类型。以下代码尽管能够编译成功,但在运行时,creature变量引用的Cat对象无法转变为Dog类型,因此会抛出ClassCastException:Creaturecreature=newCat();Animalanimal=(Animal)creature;/运行正常,Cat对象可转换为Animal类型Catcat=(Cat)creature;/运行正常,Cat对象可以被Cat类型的引用变量引用Dogdog=(Dog)creature

16、VarSubmethodStaticBasemethod,多态,再看一个例子:publicabstractclassAabstractvoidmethod();voidtest()method();/到底调用哪个类的mehtod()方法?publicclassBextendsAvoidmethod()/覆盖父类的method()方法System.out.println(Sub);publicstaticvoidmain(Stringargs)newB().test();,多态,运行类B的main()方法将打印Sub。方法test()在父类A中定义

17、,它调用了方法method()。虽然方法method()在类A中被定义为是抽象的,它仍然可以被调用,因为在运行时环境中,Java虚拟机会执行类B的实例的method()方法。一个实例所属的类肯定实现了父类中所有的抽象方法(否则这个类不能被实例化)。再看一个例子:publicclassAvoidmethod()System.out.println(Base);voidtest()method();publicclassBextendsAvoidmethod()System.out.println(Sub);publicstaticvoidmain(Stringargs)newA().test();/调用类A的method()方法newB().test();/调

THE END
1.一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象...*饲养员类 *广州达内科技http://www.gztarena.com/ */ classFeeder{ /** *饲养员给某种动物喂某种食物 *@paramanimal *@paramfood */ publicvoidfeed(Animal animal, Food food) { animal.eat(food); } } /** *@authorleno *测试饲养员给动物喂食物 ...https://www.cnblogs.com/javaitpx/archive/2012/11/14/2769318.html
2.java基于ssm动物园管理系统论文.docjava与sqlserver数据库连接 25 5.2系统功能实现 25 5.2.1前台页面的实现 25 5.2.2登录模块的实现 26 5.2.3动物信息管理模块 27 5.2.4饲养员信息管理模块 29 5.2.5园区活动管理模块 30 第六章 系统测试 32 6.1测试目的 32 6.2测试用例 32 6.2.1登录测试 32 6.2.2注册测试 32 6.2.3系统简介测试 33 6.2....https://max.book118.com/html/2022/0623/8101011073004112.shtm
1.java:多态练习根据需求完成代码:1.定义狗类 属性 行为: 2.定义猫类 属性: 行为: 年龄,颜色 eat(String something)(something表示吃的东西)看家lookHome方法(无参数) 年龄,颜色 eat(String something)方法(something表示吃的东西)逮老鼠catchMouse方法(无参数) 3.定义Person类//饲养员 ...https://blog.csdn.net/2303_81073778/article/details/143726589
2.java实现一个动物类的方法mob64ca12e33720的技术博客在进行面向对象编程时,类是一个重要的概念。在Java中,类可以用于定义对象的属性和方法。本文将以“动物类”为例,展示如何使用Java创建一个动物类,并实现基本的方法。 什么是动物类? 动物类可以看作是一个描述动物共性的基类,例如,动物都有一个名字、年龄和叫声。通过这个基本的动物类,我们可以创建不同种类的动物...https://blog.51cto.com/u_16213376/12562314
3.118基于Java+Springboot的宠物寄养管理系统(源代码+数据库) 本系统分为管理员、用户两种角色 ### 1、用户: 登陆、注册、密码修改、宠物寄养、寄养订单、宠物商品展示、查询、详情、购物车、支付、下单、订单评论、回复、修改个人信息 ### 2、管理员: 登陆、密码修改、数据可视化、个人信息、用户管理、商品分类管理、...https://java.code.coder100.com/index/index/content/id/60217
4.人狗大战:如何使用Java语言编写经典战斗游戏的代码并优化性能...在现代游戏或应用开发中,Java语言因其跨平台性和强大的功能,广泛应用于各种项目中。而"人狗大战"作为一种经典的战斗类游戏或题材,常常成为开发者用来测试算法、界面设计、事件控制等技术的一个项目范例。本文将通过分析“人狗大战”这个题材,探讨如何使用Java语言编写相关的代码,实现游戏中的人物与狗之间的战斗机制,...http://m.hkwing.com/article/63247.html
5.案例4【案例4-2】饲养员喂养动物 Home/【案例4-2】饲养员喂养动物http://yzkc.scetop.com/kc/javasj/?page_id=109
6.Java基础案例教程(第2版)图书1.黑马程序员系列教材改版。 2.本书在保留了原有风格的基础上,内容做了大量更新,包括采用最新的IntelliJ IDEA开发工具,在GUI知识章节重点介绍轻量级的Java Swing组件,新增了反射的相关知识,新增了更多阶段案例,突出培养读者的实践能力。 3.配套丰富的教学资源,包括配套视频、源代码、题库、教学课件等。 https://www.ryjiaoyu.com/book/details/41845
7.张家口饲养员招聘(工资待遇要求)达华工程管理(集团)有限公司张家口 饲养员 招聘相关职位 取自达华工程管理(集团)有限公司近一年相关招聘职位 动物饲养员 张家口-涿鹿县 | 不限经验 | 不限学历 2000-3000 收集原料,喂养动物, 更多 查看公司相关招聘 热门公司饲养员招聘薪酬 饲养员 张家口君乐宝旗帜牧业有限公司 张家口-张北县 | 不限经验 | 不限学历 ¥3K-4K ...https://www.jobui.com/company/12083891/salary/j/siyangyuan/zhangjiakou/
8.「广州动物园招聘」广州动物园怎么样?会计师事务所交易员,任职广州动物园饲养员职位,常驻广东;近期有79位访问者,在脉脉形成影响力24;在2021-6至今,任广州动物园公司饲养员职位。 工作经历 饲养员 广州动物园 2021.06 - 至今(3年5个月) 罗先生 广州动物园 · 饲养员 影响力23 访客158广东广州 个人简介 畜牧业其他,任职广州动物园饲养员职位,常驻...https://maimai.cn/brand/home/1eSPKfvYS
9.笼子里有一只老虎,饲养员给动物园里放了一只鸭子和一只兔子...2022-10-29 16:04 华南农业大学 Java 关注 笼子里有一只老虎,饲养员给动物园里放了一只鸭子和一只兔子,请问先吃哪个查看原帖11 14 相关推荐 10-30 09:47 武汉音乐学院 嵌入式软件开发 海康威视 联影医疗 28号收到的海康线上座谈会通知 29号早上座谈会然后 下午发的offer 给了两天时...https://www.nowcoder.com/discuss/comment/14850749
10.初中摘抄,带题目(精选10篇)问题1:公园里有猴子10只, 但是公园的管理人为了吸引更多的游客决定引进更多的猴子, 使得新引进的动物的数量是原有数量的两倍再多6只, 那么引进新动物之后公园的动物一共有多少只? 问题2:猴子买回来之后, 有一个初三学生小邓对猴子的数量发生了兴趣, 但是点数的话不准确, 所以小邓就找到公园的饲养员问:这里的...https://www.360wenmi.com/f/filez904iams.html
11.2024最新O'Reilly动物书推荐(附国内外购买网站+优惠码)大名鼎鼎的O'Reilly 动物书,相信每一位计算机从业人员都读过,这系列图书最让人深刻的就是封面上的各种各样的手绘动物(包括鸟类),让O'Reilly的书在各种计算机书籍中显得独树一帜,也正因为如此此类书又被IT界人士称为动物世界、饲养员指南等。就凭拥有这么多的昵称就知道这系列书在广大读者的心目中的喜爱程度了。https://www.extrabux.cn/chs/guide/4053836
12.java类和对象案例实现腾讯云开发者社区饲养员再给动物喂食时,给不同的动物喂食,而且在每次喂时。动物会发出欢快的叫声。 例如:给小狗喂骨头,小狗会汪汪叫。给小猫喂鱼 小猫会喵喵喵。 代码语言:javascript 复制 /** * 小狗把小花的骨头抢走了,小花wangwangwang *///定义接口 供外部 实现interfaceRunss{voidshiwu();voidsay();}// 动物类 定义 ...https://cloud.tencent.com/developer/article/2360706
13.ak.akvtc.cn/mokied/710061.htmlBloys回答道:“她的参与度相当高。她在编剧和导演的选择过程中非常投入,我想她在选角方面也会有意见。但这并没有影响演员的选拔或编剧及制作团队的招聘。所以,我们没有感受到这些(争议)对剧集产生影响。” HBO今年早些时候宣布,已聘请《继承之战》制片人Francesca Gardiner和Mark Mylod担任《哈利·波特》剧集的创意总...http://ak.akvtc.cn/mokied/710061.html