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

news2025/6/8 10:14:08

一、实验目的

  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;
    }

    @Override
    public 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;
    }

    @Override
    public 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() {
    }

    @Override
    public 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;
    }

    @Override
    public 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;
    }

    @Override
    public 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.coloradmin.cn/o/1853516.html

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

相关文章

人工智能赋能数据资产分析:借助先进的人工智能技术,优化数据处理流程,显著提升数据资产分析的准确性和效率,为企业决策提供强大支撑,推动业务快速发展

一、引言 在数字化浪潮席卷全球的今天&#xff0c;数据已经成为企业最宝贵的资产之一。如何有效地分析这些数据&#xff0c;挖掘其中的价值&#xff0c;为企业决策提供有力支持&#xff0c;是每个企业都面临的挑战。近年来&#xff0c;人工智能技术的快速发展&#xff0c;为数…

WordPress软件下载主题Inpandora

Inpandora&#xff08;中文名为潘多拉&#xff09;是一款基于软件下载站定制的WordPress主题&#xff0c;帮助站长使用WordPress快速搭建一个专业的WordPress软件博客。Inpandora这款WordPress主题可以说是因软件而生&#xff0c;从UI设计到后台设置功能&#xff0c;都充分体现…

数据结构9——排序

一、冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff0c;顾名思义&#xff0c;就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右&#xff0c;依次比较相邻的元素大小&#xff0c;更大的元素交换到右边&#xff1b;从第一组相邻元素比较…

【Java】Java基础语法

一、注释详解 1.1 注释的语法&#xff1a; // 单行注释/*多行注释 *//**文档注释 */ 1.2 注释的特点&#xff1a; 注释不影响程序的执行&#xff0c;在Javac命令进行编译后会将注释去掉 1.3 注释的快捷键 二、字面量详解 2.1 字面量的概念&#xff1a; 计算机是用来处理…

Bandzip:打破压缩界限,文件管理更高效

名人说&#xff1a;&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、软件介绍1、Bandzip2、核心特点 二、下载安装1、下载2、安装 三、使用方法 很高兴…

拖拽劫持与数据窃取

2010 年&#xff0c;ClickJacking 技术有了新的发展。一位名叫 Paul Stone 的安全研究者在 BlackHat 2010 大会上发表了题为“Next Generation Clickjacking”的演讲。在该演讲中&#xff0c;提出了“浏览器 拖拽事件”导致的一些安全问题。 目前很多浏览器都开始支持 Drag &a…

【pytorch05】索引与切片

索引 a[0,0]第0张图片的第0个通道 a[0,0,2,4]第0张图片&#xff0c;第0个通道&#xff0c;第2行&#xff0c;第4列的像素点&#xff0c;dimension为0的标量 选择前/后N张图片 a[:2,:1,:,:].shape前两张图片&#xff0c;第1个通道上的所有图片的数据 a[:2,1:,:,:].shape前两张…

智能优化算法改进策略之局部搜索算子(八)--Powell方法

1、原理介绍 Powell方法[1]是一种无约束优化算法&#xff0c;又称为方向加速法&#xff0c;用于寻找多变量函数的极小值。其基本思想是在迭代中逐次产生Q共轭方向组&#xff0c;本质上它属于不需计算导数的共轭方向法。每次迭代后&#xff0c;算法会更新搜索方向&#xff0c;并…

【Android源码解析】一篇搞定“路由、网络层、UI层、通信层

资料获取 扫一扫下方二维码即可免费领取1880页的《Android百大框架源码解析》 《Android 百大框架源码解析》 1.Retrofit 2.0源码解析 2.Okhttp3源码解析 3.ButterKnife源码解析 4.MPAndroidChart 源码解析 5.Glide源码解析 6.Leakcanary 源码解析 7.Universal-lmage-Loa…

如何解决vue中的路由守卫失效问题

引言 1. 路由守卫简介 路由守卫是前端开发中一个至关重要的概念&#xff0c;特别是在使用单页应用&#xff08;SPA&#xff09;框架如React、Vue或Angular时。它们充当了SPA中的“门卫”&#xff0c;控制着用户对不同页面的访问权限。路由守卫的核心功能是确保用户在访问特定…

ChatGPT-4o也参加高考了,还写了六大考卷的全部作文! |【WeThinkIn出品】

写在前面 【WeThinkIn出品】栏目专注于分享Rocky的最新思考与经验总结&#xff0c;包含但不限于技术领域。欢迎大家一起交流学习&#x1f4aa; 欢迎大家关注Rocky的公众号&#xff1a;WeThinkIn 欢迎大家关注Rocky的知乎&#xff1a;Rocky Ding AIGC算法工程师面试面经秘籍分享…

51-52Windows密码安全性测试与Windows提权

目录 Windows密码安全性测试 一、本地管理员密码如何直接提取 1、直接通过mimikatz读取管理员密码 2、使用laZagne工具读取管理员密码 二、利用Hash远程登录系统 window提权 三、远程webshell执行命令解决 不能执行原因&#xff1a; 解决方法&#xff1a;单独上传cmd.e…

Java——封装(Encapsulation)

一、封装简介 1、封装是什么 封装&#xff08;Encapsulation&#xff09;是面向对象编程&#xff08;OOP&#xff09;中的一个基本概念&#xff0c;它指的是将对象的状态&#xff08;数据&#xff09;和行为&#xff08;方法&#xff09;绑定在一起&#xff0c;并对外隐藏对象…

YouTube API接口:一键获取Playlist视频合集信息

核心功能介绍 在视频内容日益繁荣的今天&#xff0c;YouTube作为全球领先的视频分享平台&#xff0c;为内容创作者、品牌商家以及数据分析师提供了丰富的视频资源。其中&#xff0c;Playlist视频合集作为YouTube上的一种特色内容形式&#xff0c;深受用户喜爱。为了更好地满足…

个性化光标和动态壁纸

光标 进入这个宝藏网页至美化 至美化 进入鼠标页面&#xff0c;选择自己喜欢的鼠标&#xff0c;进入相关页面 分为两种&#xff0c;那么热爱有钱的UU可以选择高清版 像我这种没钱的孩子或者觉得试用版够用的就使用上面的 点击下载 进入自己的文件夹&#xff0c;解压成功之…

idea添加文档注释

一、easy javadoc插件 在settings的plugins中下载easy javadoc插件。 安装完成后重启idea&#xff0c;再次打开settings界面。会出现easyDoc相关配置。 二、设置模版以及使用 类描述模版参考设置&#xff1a; /** * 类描述 -> * * Author: ywz * Date: $Date$ */ 方法描述…

人脸识别技术:前沿应用与业务场景探索

随着科技的飞速发展&#xff0c;人脸识别技术已经成为我们日常生活中不可或缺的一部分。这项技术以其独特的生物特征识别能力&#xff0c;在公共安全、金融、交通、教育等多个领域展现出巨大的潜力和价值。本文将深入探讨人脸识别技术的原理、业务场景以及相关的成功案例。 一、…

示例:推荐一个自定义的Ribbon皮肤

一、目的&#xff1a;WPF自带的Ribbon控件功能很强大&#xff0c;但使用过程中感觉显示的样式不是很好&#xff0c;或者不适合自己的项目&#xff0c;下面介绍一个基于自带Ribbon控件样式的修改&#xff0c;主要修改了些高度&#xff0c;间距&#xff0c;背景色&#xff0c;前景…

借助ChatGPT降低学术论文重复率,使用技巧全攻略,实用有效,快速上手

大家好&#xff0c;感谢关注。我是七哥&#xff0c;一个在高校里不务正业&#xff0c;折腾学术科研AI实操的学术人。可以&#xff08;yida985&#xff09;交流学术写作或ChatGPT等AI领域相关问题&#xff0c;多多交流&#xff0c;相互成就&#xff0c;共同进步。 经常有学术同…

文心智能体平台介绍和应用:制作你的智能体(运维小帮手)

这是我自己制作的智能体 大家可以了解一下&#xff01; 运维小帮手&#xff01;https://mbd.baidu.com/ma/s/tE19dqvr 文心智能体平台官网首页 点击跳转&#xff01;https://agents.baidu.com/ 什么是智能体平台&#xff1f; 文心智能体平台&#xff08;Wenxin Intelligen…