Java宝藏实验资源库(8)多态、抽象类和接口

一、实验目的

  1. 理解面向对象程序的基本概念。
  2. 掌握类的继承和多态的实现机制。
  3. 熟悉抽象类和接口的用法。

 二、实验内容、过程及结果 

**1.Using the classes defined in Listing 13.1, 13.2, 13.3, write a test program that creates an array of some Circle and Rectangle instances, compare the instances on the basis of area, find the largest instance and display it.

题目1:使用清单13.1、13.2和13.3中定义的类,编写一个测试程序,该程序创建一些Circle和Rectangle实例的数组,根据面积比较实例,找到最大的实例并显示它。

运行代码如下 : 

// GeometricObject.java
public abstract class GeometricObject {public abstract double getArea();public static GeometricObject max(GeometricObject o1, GeometricObject o2) {if (o1.getArea() > o2.getArea()) {return o1;} else {return o2;}}
}
// Circle.java
public class Circle extends GeometricObject {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double getArea() {return Math.PI * radius * radius;}
}
// Rectangle.java
public class Rectangle extends GeometricObject {private double width;private double height;public Rectangle(double width, double height) {this.width = width;this.height = height;}@Overridepublic double getArea() {return width * height;}
}
// TestGeometricObject.java
public class TestGeometricObject {public static void main(String[] args) {GeometricObject[] objects = new GeometricObject[4];objects[0] = new Circle(5);objects[1] = new Rectangle(3, 4);objects[2] = new Circle(10);objects[3] = new Rectangle(5, 6);GeometricObject maxObject = objects[0];for (int i = 1; i < objects.length; i++) {maxObject = GeometricObject.max(maxObject, objects[i]);}if (maxObject instanceof Circle) {System.out.println("最大的圆的面积是: " + maxObject.getArea());} else if (maxObject instanceof Rectangle) {System.out.println("最大的矩形的面积是: " + maxObject.getArea());}}
}

运行结果    

**2.Define a class named ComparableGeometricObject that extends GeometricObject and implements Comparable. Rewrite the Circle class and Rectangle class in Listing 13.2 and Listing 13.3 to extend ComparableGeometricObject. Draw the UML diagram and implement these classes. Write a test program that creates an array of some Circle and Rectangle instances, sort the array and display the sorted elements.

**2.定义一个名为ComparableGeometricObject的类,它扩展了GeometricObject并实现了Comparable。重写清单13.2和清单13.3中的Circle类和Rectangle类,以扩展ComparableGeometricObject。绘制UML图并实现这些类。编写一个测试程序,创建一个由一些Circle和Rectangle实例组成的数组,对数组进行排序并显示排序后的元素。以上翻译结果来自有道神经网络翻译(YNMT)· 通用场景

运行代码如下 : 

// GeometricObject.java
public abstract class GeometricObject {public GeometricObject() {}public abstract double getArea();public static GeometricObject max(GeometricObject o1, GeometricObject o2) {if (o1.getArea() > o2.getArea()) {return o1;} else {return o2;}}
}
// ComparableGeometricObject.java
public abstract class ComparableGeometricObject extends GeometricObject implements Comparable<GeometricObject> {public ComparableGeometricObject() {}@Overridepublic int compareTo(GeometricObject obj) {if (this.getArea() > obj.getArea()) {return 1;} else if (this.getArea() < obj.getArea()) {return -1;} else {return 0;}}
}
// Circle.java
public class Circle extends ComparableGeometricObject {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double getArea() {return Math.PI * radius * radius;}
}
// Rectangle.java
public class Rectangle extends ComparableGeometricObject {private double width;private double height;public Rectangle(double width, double height) {this.width = width;this.height = height;}@Overridepublic double getArea() {return width * height;}
}
// TestComparableGeometricObject.java
import java.util.Arrays;public class TestComparableGeometricObject {public static void main(String[] args) {ComparableGeometricObject[] objects = new ComparableGeometricObject[4];objects[0] = new Circle(5);objects[1] = new Rectangle(3, 4);objects[2] = new Circle(10);objects[3] = new Rectangle(5, 6);Arrays.sort(objects);System.out.println("排序后的对象:");for (ComparableGeometricObject obj : objects) {if (obj instanceof Circle) {System.out.println("圆的面积: " + obj.getArea());} else if (obj instanceof Rectangle) {System.out.println("矩形的面积: " + obj.getArea());}}}
}

运行结果  

 

三、实验结论

       通过本次实验实践了类的继承和多态的实现机制的知识和操作,熟悉了抽象类和接口的用法得到了理论要与实践相结合的感悟,在实践操作方面可以再努努力!

 结语    

你都不知道山有多高

你怎么知道终点在哪

!!!

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

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

相关文章

轨道地铁智能录音无线通信解决方案

一、行业背景 随着社会经济和通信行业的迅速发展&#xff0c;电话已成为企业运作中必不可少的联络手段。但电话作为即时沟通手段&#xff0c;往往无法进行事后追溯和复盘&#xff0c;容易造成不必要的麻烦。尤其在交通轨交行业领域&#xff0c;对语音工作的发生过程更需要有个…

System.getProperty()方法总结

System.getProperty()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;System.getProperty()方法是Java中用于获取系统属性的方法之一。它允许我们访问J…

SpringCloud微服务框架的原理及应用详解(二)

本系列文章简介&#xff1a; 随着云计算、大数据和物联网等技术的飞速发展&#xff0c;企业应用系统的规模和复杂度不断增加&#xff0c;传统的单体架构已经难以满足快速迭代、高并发、高可用性等现代业务需求。在这样的背景下&#xff0c;微服务架构应运而生&#xff0c;成为了…

Java中的JVM、JRE和JDK有什么区别?

在Java中&#xff0c;JVM、JRE和JDK是三个密切相关但功能不同的组件。 JVM是Java虚拟机的缩写&#xff0c;是一种软件实现的抽象计算机。它的主要作用是执行Java字节码&#xff08;Bytecode&#xff09;&#xff0c;使得Java程序能够在不同的操作系统和硬件上运行而不需要重新…

全栈人工智能工程师:现代博学者

任何在团队环境中工作过的人都知道&#xff0c;每个成功的团队都有一个得力助手——无论你的问题性质如何&#xff0c;他都能帮助你。在传统的软件开发团队中&#xff0c;这个人是一个专业的程序员&#xff0c;也是另一种技术的专家&#xff0c;可以是像Snowflake这样的数据库技…

基于STM8系列单片机驱动74HC595驱动两个3位一体的数码管

1&#xff09;单片机/ARM硬件设计小知识&#xff0c;分享给将要学习或者正在学习单片机/ARM开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 为了节省单片机MCU的IO口资源驱动6个数码管&…

数据分析的Excel基础操作

数据透视表 1.先备份&#xff0c;创建原数据副本&#xff0c;将副本sheet隐藏掉。 2.看数据的量级&#xff0c;总行和总列。 3.浏览数据的字段和数值&#xff0c;大致看一下有无异常 4.找到插入->数据透视表&#xff0c;不选择默认点击确认创建&#xff0c;随意点击数据透视…

CAC 2.0融合智谱AI大模型,邮件安全新升级

在数字化时代&#xff0c;电子邮件的安全问题日益成为关注的焦点。Coremail CACTER邮件安全人工智能实验室&#xff08;以下简称“CACTER AI实验室”&#xff09;凭借其在邮件安全领域的深入研究与创新实践&#xff0c;不断推动技术进步。 此前&#xff0c;CACTER AI实验室已获…

日常工作记录目录

SpringBoot篇 10. 全局异常处理与自定义异常 700. 方法返回值缓存 800. 前端数据基础校验 900. 定时任务 1000. Execl数据导入 EasyExcel实现 2000. 二维码下载与前端展示 二维码下载与展示 <

docker进阶篇

docker进阶篇 (重点) 1、docker run2、docker ps3、docker restart4、docker pull5、docker stop6、docker logs7、docker stats8、docker rm(重点) 9、docker exec10、查看本机镜像docker image11、发布镜像docker commit12、docker save(例如保存为tar给别人用)13、删除镜像1…

深信服2024笔试

一 &#xff1a;服务器 小明是一名公司的IT运维工程师&#xff0c;负责管理公司的IT系统。公司总共有两个配置相同的服务器A和B&#xff0c;各运行了若干个服务。现在小明发现两台服务器上运行的服务占用的内存总和不相等(假设每个服务占用内存是-个恒定正整数)&#xff0c;打…

【2024最新精简版】网络_Linux操作系统面试篇

文章目录 简述 tcp 和 udp的区别&#xff1f;get 和 post 请求有哪些区别&#xff1f;常用HTTP请求方式有哪些 ?进程跟线程的区别&#xff1f;僵尸进程&#xff1f;IO的多路复用&#xff1f;虚拟内存什么是OSI模型说一说HTTP协议说一说HTTPS协议HTTPS协议和HTTP协议有什么区别…

C语言 | Leetcode C语言题解之第172题阶乘后的零

题目&#xff1a; 题解&#xff1a; int trailingZeroes(int n) {int ans 0;while (n) {n / 5;ans n;}return ans; }

【MAUI】resource xml/file_paths (aka com.xxx.xxx:xml/ file _paths) not found.

APP2260:resource xml/file_paths (aka com.zettlercn.wms:xml/ file _paths) not found. This error is likely caused by an issue with the AndroidManifest.xml file or an Android manifest generation attribute in a source code file MAUI从6.0升级到8.0,调试发现资源…

【TensorFlow深度学习】TensorFlow与PyTorch框架间的异同对比

TensorFlow与PyTorch框架间的异同对比 TensorFlow与PyTorch框架间的异同对比:深度学习双雄的较量1. 设计哲学与学习曲线2. 模型构建与模块化3. 自动微分与优化器4. 分布式训练与部署5. 社区与生态系统TensorFlow与PyTorch框架间的异同对比:深度学习双雄的较量 在深度学习领域…

BGP高级特性

BGP路由反射器 l 路由反射器的两种角色 RR&#xff08;router reflector&#xff09;&#xff1a;路由反射器 client&#xff1a;RR客户端 l RR会将学习到的路由反射出去&#xff0c;从而使得IBGP路由在AS内传播时无需建立IBGP的全互联结构 l 将一台BGP路由器指定为RR的…

【仿真建模-anylogic】动态生成ConveyorCustomStation

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-18 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 0. 背景 直接使用Anylogic组件开发的模型无法动态改变运输网布局&#xff1b;目前需求是要将运输网布局配置化&#xff1b;运输网配置化…

安卓逆向案例——X酷APP逆向分析

X酷APP逆向分析 这里介绍一下两种不同的挂载证书的方法。 chls.pro/ssl无法在浏览器中下载证书是什么原因解决方法&#xff1a; 法一 1. 挂载系统分区为读写 使用正确的挂载点来挂载系统分区为读写&#xff1a; su mount -o remount,rw /dev/uijISjR/.magisk/block/syste…

前端 CSS 经典:旋转边框效果

效果&#xff1a; 思路&#xff1a;使用伪元素&#xff0c;给伪元素设置背景色&#xff0c;然后定位&#xff0c;遮盖&#xff0c;旋转。就可以实现旋转边框效果。 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta chars…

docker in docker 在CI中应用解析

docker in docker 简介 docker里嵌套运行docker&#xff0c;本文讲解其在jenkins和gitlab-runner 种的调用流程 一、用于jenkins 容器化部署jenkins时调用docker命令集成CI功能 [rootops-demo~]# docker inspect jenkins --format"{{json .Mounts}}" [{"T…