解析java多态经典习题

article/2025/9/12 22:57:47

解析java多态经典习题

1 题目一

1.1 题目内容

编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从
而发出不同的声音。
可以弹奏的乐器包括二胡、钢琴和琵琶。
实现思路及关键代码:
①定义乐器类Instrument,包括方法makeSound()
②定义乐器类的子类:二胡Erhu、钢琴Piano和
小提琴Violin
③定义乐手类Musician,可以弹奏各种乐器
play(Instrument i)
④定义测试类,给乐手不同的乐器让他弹奏

1.2 示例代码

Instrument类

package Work03;
public class Instrument {public void makeSound(){System.out.println("乐器在奏乐");}
}

Erhu类

package Work03;public class Erhu extends Instrument{@Overridepublic void makeSound() {System.out.println("二胡,弹奏的曲目是二泉映月");}
}

Piano类

package Work03;public class Piano extends Instrument{@Overridepublic void makeSound() {System.out.println("钢琴,弹奏的曲目是致爱丽丝");}
}

Violin类

package Work03;public class Violin extends Instrument{@Overridepublic void makeSound() {System.out.println("小提琴,弹奏的曲目是沉思");}
}

Muscian类

package Work03;public class Musician {private String  name;public Musician() {}public Musician(String name) {this.name = name;}public void play(Instrument i){System.out.print(name+"弹奏的乐器是");i.makeSound();}
}

Test类

package Work03;
public class Test {public static void main(String[] args) {Musician m=new Musician("张三");m.play(new Piano());m.play(new Erhu());m.play(new Violin());}
}

1.3 示例代码运行截图

在这里插入图片描述

2 题目二

2.1 题目内容

编写程序实现主人喂养宠物和跟宠物玩耍的场景
定义宠物类Pet,宠物都需要吃东西,跟主人玩。
定义狗类Dog、猫类Cat、Dolphin海豚类继承Pet宠物类。
狗狗吃骨头、猫咪吃老鼠、海豚吃乌贼。

主人和宠物的玩耍是每个宠物都独有一份

主人跟狗狗完抓飞盘,主人跟猫咪玩抓老鼠、主人跟海豚玩转圈圈。

2.2 示例代码

Pet类

package Work03;
//上课练习
public class Pet {private String name;public Pet() {}public Pet(String name) {this.name = name;}//吃的方法public void eat(){}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

Dog类

package Work03;public class Dog extends Pet{public Dog() {}public Dog(String name) {super(name);}public void catchDisc() {System.out.println("玩抓飞盘");}@Overridepublic void eat() {System.out.println("狗狗在啃骨头");}
}

Cat类

package Work03;public class Cat extends Pet{public Cat() {}public Cat(String name) {super(name);}public void catchMouse() {System.out.println("玩抓老鼠");}@Overridepublic void eat() {System.out.println("猫咪吃老鼠");}
}

Dolphin类

package Work03;public class Dolphin extends Pet{public Dolphin() {}public Dolphin(String name) {super(name);}public void runningCircle() {System.out.println("玩转圈圈");}@Overridepublic void eat() {System.out.println("海豚吃乌贼");}
}

Master类

package Work03;public class Master {private  String name;public Master() {}public Master(String name) {this.name = name;}public void feed(Pet pet){//得出喂食的宠物是什么名字,是狗还是猫还是海豚if(pet instanceof Dog){System.out.println(name+"喂食的宠物是一只叫"+ ((Dog)pet).getName()+"的狗狗");}else if(pet instanceof Cat){System.out.println(name+"喂食的宠物是一只叫"+ ((Cat)pet).getName()+"的猫咪");}else if(pet instanceof Dolphin){System.out.println(name+"喂食的宠物是一只叫"+ ((Dolphin)pet).getName()+"的海豚");}//吃的方法都是被重写的,无需进行类型的判断pet.eat();}public void play(Pet pet){//每个宠物的玩耍方法都是其独有的方法,因此需要向下转型,向下转型前需要对类型进行判断if(pet instanceof Dog){System.out.print(name+"是和一只叫"+ ((Dog)pet).getName()+"的狗狗");((Dog)pet).catchDisc();}else if(pet instanceof Cat){System.out.print(name+"是和一只叫"+ ((Cat)pet).getName()+"的猫咪");((Cat)pet).catchMouse();}else if(pet instanceof Dolphin){System.out.print(name+"是和一只叫"+ ((Dolphin)pet).getName()+"的海豚");((Dolphin)pet).runningCircle();}}
}

Test类

package Work03;
public class Test {public static void main(String[] args) {Master master=new Master("张三");Dog dog=new Dog("德福");Cat cat=new Cat("叮当");Dolphin dolphin=new Dolphin("祥云");master.feed(dog);master.feed(cat);master.feed(dolphin);master.play(dog);master.play(cat);master.play(dolphin);}
}

2.3 示例代码运行截图

在这里插入图片描述

3 思路总结

3.1 使用多态后调用重写的方法时,无需进行对象类型的判断

理由:因为它会自动去找对应类型里面的重写了的方法去运行

3.2 使用多态后,想要调用子类特有的方法,必须实现向下转型,且向下转型前必须判断对象是哪个类型的

向下转型的理由: 使用多态后只能调用父类型特征里面从父类继承过来的属性非重写方法、以及子类重写的方法,要使用子类特有的方法就必须是子类对象才可以调用,因此需要向下转型

向下转型前必须判断对象的类型:因为只有强转的类型和实例化对象的类型保持一致,两者才可以强转,不然会出现ClassCastException类型转化异常,例如Animal a=new Dog();你只能对Animal强转成Dog类型,你强转成Cat就会报错(运行报错,编译可以通过)


http://chatgpt.dhexx.cn/article/Svn64QT5.shtml

相关文章

java多态(java多态的概念)

简述什么是JAVA中的多态 父类的引用可以引用子类的对象。换句话说,如果有一个类继承或实现了某个类或接口,那么被继承或实现的类或接口可以创建那一个类的对象,这样程序就会变得很灵活。 java中多态的定义是什么? 多态性是指允许不…

彻底搞懂Java多态

很多初学者在自学Java时候都卡在了Java多态,本教程从实际案例出发阐述Java多态现象及Java多态的原理。 通过案例理解多态的现象 需求描述 多态是类在继承关系下的一种形态,下边先通过一个需求展示下多态的现象。 攀博课堂是一个在线教育学习平台&…

java多态实现原理

众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。C 和 Java 作为当前最为流行的两种面向对象编程语言,其内部对于多态的支持到底是如何实现的呢&#xff0…

新手小白学JAVA 面向对象之多态

多态 1. 概念 多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。 可以把不同的子类对象都当作父…

html表单实例:用户反馈表单页面代码

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>demo</title> </head> <body><h1 align"center">用户反馈表单</h1><form method"post"><…

html 下拉多选框代码,js实现下拉复选框效果(代码实例)

本章给大家带来用js实现下拉复选框效果(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 先看看效果: 下面我们看看代码: HTML代码: HTMLCSSJavaScriptjQueryPHPMySQLJavaC#C++Pyhtoncss代码:div {display: inline-block; } select {min-width…

HTML实例--制作表单

运用表格和表单基础知识简单制作一个表单 表单制作使用表格来对表单进行排版美化 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">…

Html5 Canvas绘图实例

前些年的时候&#xff0c;突然对Canvas感兴趣&#xff0c;利用空闲时间做一些Canvas小例子进行练习&#xff0c;仅供学习分享使用。如有不足之处&#xff0c;还请指正。 什么是 Canvas&#xff1f; HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。画布是一个矩形区域…

用html做个随机点名系统代码,html座位表随机点名的实例代码

这篇文章详解html座位表随机点名的实例代码点名 td { width: 9.09%; height: 50px; text-align: center; } .tdBg { background-color: pink; } var timer null; // 这是一个函数&#xff0c;表示一个功能 function start(){ timer setInterval(function(){ // alert("要…

在html中如何写日期的代码,日期html代码

日期 时间 星期的html代码是什么代码 创建静态方法findDate,返回List类型。 声明一个List list集合,向List集合存储英文星期。 调用findDate静态方法,并打印List集合存储结果。 CSS布局HTML小编今天和大家分享一个显示当前系统日期的HTML代码 显示的格式为“某年某月某日”,…

html向上移动图片代码,图片随网页上下移动的代码实例

我们以腾讯QQ网页在线客服为例,大家将代码拷到DW中,用心体会。图片随网页上下移动的代码实例 function picsize(obj,MaxWidth){img=new Image(); img.src="/obj.src"; if (img.width>MaxWidth) {return MaxWidth; } else {return img.width; } } function Close…

html5 简单实例源代码

实例教程&#xff1a;http://www.w3school.com.cn/jquery/ 源代码下载&#xff1a; http://download.csdn.net/detail/wyx100/9827067 html5文件布局结构 html5文件布局结构html5语言标记 浏览器执行效果 html5文件源代码 源代码下载&#xff1a; http://download.csdn.net/de…

html实例,实现表单

1.使用HTML完成下列功能 <!doctype html> <html><head><!-- <meta charset"GBK">--></head><body><table width"60%" border"3" align"center" bgcolor"#F0F8FF" borderColor…

html导航栏纵向代码,html横向导航栏怎么做?横向导航条代码实例

有不少小伙伴在刚学习 html 的时候都会遇到这样一个问题&#xff1a;html 横向导航栏怎么做&#xff1f;今天W3Cschool小编就为大家分享一下简单的横向导航条代码&#xff0c;相信会对大家有所帮助。 html 横向导航栏一般用两种方法来制作&#xff1a;第一种&#xff0c;我们使…

html如何插入下拉菜單,html下拉菜单怎么做?html下拉菜单的代码实例介绍

本篇文章主要的介绍了关于HTML select标签下拉菜单的做法实例&#xff0c;还有一个html的一些网站的下拉菜单的用法都放在了文章中&#xff0c;下面就让我们一起来看看这篇文章吧 首先我们要知道html下拉菜单的代码是什么&#xff1f; 很明显是select元素可创建单选或多选菜单。…

HTML代码示例和介绍

HTML基本的格式 <!DOCTYPE html> <!-- 声明文档。定义html --> <html lang"en"> <!-- 元素是页面的根元素 --> <head> <!-- 元素包含文档的元数据 --><meta charset"UTF-8"&g…

STM32仿真器下载程序出现SWD/JTAG Communication Failure的解决方法

一、解决办法&#xff1a;将STM32开发板断电&#xff0c;将板子上的BOOT0用短路帽接入3.3V高电平&#xff0c;重新插入仿真器&#xff0c;下载程序到开发板。不出意外可见程序烧录成功&#xff0c;此时将BOOT0接回低电平&#xff0c;后续烧录程序便不会出现SWD/JTAG Communicat…

keil无法识别JTAG仿真器解决办法

一、操作步骤 1、操作环境&#xff1a; 开发板&#xff1a;野火STM32H743XI 电脑系统版本&#xff1a;Windows 10 专业版 使用笔记本调试 JTAG&#xff1a;Fire-Debugger 野火 高速版DAP编程器 2、操作步骤&#xff1a; 将JTAG连接在STM32调试接口和电脑USB接口上&#xff0c…

JTAG调试原理

转自&#xff1a;https://blog.csdn.net/sinat_24088685/article/details/50980501 1.介绍 JTAG&#xff08;Joint Test Action Group&#xff0c;联合测试行动小组&#xff09; 是一种 国际标准测试 协议&#xff0c;主要用于 芯片内部测试 。现在多数的高级器件都支…

MCU模拟JTAG接口对LATTICE CPLD FPGA 进行在线编程加载

完整版请点击 https://hifpga.com/问题/719 索取源码&#xff0c;向博主本人提问FPGA相关问题 作者&#xff1a;Rock.Ding&#xff08;莱迪思半导体公司&#xff09;关键字&#xff1a;MCU, JTAG, 在线编程, CPLD。 前言 CPLD(Complex Programmable Logic Device)复杂可编程…