Java接口、抽象类、继承运用练习

按以下要求编写一个完整的 Java 程序:


(1)编写抽象类 GeometricObject 类;
• 该类包括 String型的变量 color 和 boolean 型的 filled 变量;
•该类有一个默认的构造方法;
•两个抽象方法,计算面积 getAreaO和计算周长 getPerimeter();
• 两个属性的访问器和修改器;


(2) 编写 Triangle 类继承 GeometricObject 类,该类包括:
•三个名为 sidel、side2、side3 的 double 型数据域表示该三角形的三条边,默认值为
1.0;
• 一个无参构造方法创建默认的三角形;
•一个能创建带指定 sidel、side2、side3 的三角形的构造方法;
• 所有三个数据域的访间器方法;
•一个名为getArea0的方法返回这个三角形的面积。三角形的面积计算公式为:
S=(边 1+边 2+边32
面积= s(s-边1(s 边2)(s 边3)
•一个名为 getPerimeter0)的方法返回这个三角形的周长;
•一个名为 toString()的方法返回这个三角形的字符串描述。toSting()方法的实现如下
: return "Triangle:side1 =" + side 1 + " side2 =" + side2 + " side3 =" + side3;


(3)编写测试类,提示用户从键盘输入三角形的三条边、颜色以及一个 boolean 值表明该三角形是否填充,程序应该使用输入创建一个具有这些属性的三角形,并将三角形的边长、面积、周长、颜色以及是否填充输出。

abstract class GeometricObject {private String color;private boolean filled;public GeometricObject() {}public abstract double getArea();public abstract double getPerimeter();public String getColor() {return color;}public void setColor(String color) {this.color = color;}public boolean getFilled() {return filled;}public void setFilled(boolean filled) {this.filled = filled;}
}// (2) Triangle 类继承 GeometricObject 类class Triangle extends GeometricObject {private double side1, side2, side3;public Triangle() {side1 = side2 = side3 = 1.0;}public Triangle(double side1, double side2, double side3) {this.side1 = side1;this.side2 = side2;this.side3 = side3;}public double getSide1() {return side1;}public double getSide2() {return side2;}public double getSide3() {return side3;}@Overridepublic double getArea() {double s = (side1 + side2 + side3) / 2;return Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));}@Overridepublic double getPerimeter() {return side1 + side2 + side3;}@Overridepublic String toString() {return "Triangle: side1 = " + side1 + " side2 = " + side2 + " side3 = " + side3;}
}// (3) 测试类
import java.util.Scanner;public class TestTriangle {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入三角形的三条边:");double side1 = scanner.nextDouble();double side2 = scanner.nextDouble();double side3 = scanner.nextDouble();System.out.println("请输入三角形的颜色:");String color = scanner.next();System.out.println("请输入一个布尔值,表示三角形是否填充:");boolean filled = scanner.nextBoolean();Triangle triangle = new Triangle(side1, side2, side3);triangle.setColor(color);triangle.setFilled(filled);System.out.println("三角形的边长为:" + triangle.getSide1() + ", " + triangle.getSide2() + ", " + triangle.getSide3());System.out.println("三角形的面积为:" + triangle.getArea());System.out.println("三角形的周长为:" + triangle.getPerimeter());System.out.println("三角形的颜色为:" + triangle.getColor());System.out.println("三角形是否填充:" + (triangle.isFilled() ? "是" : "否"));}
}

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

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

相关文章

【C/C++】静态函数调用类中成员函数方法 -- 最快捷之一

背景 注册回调函数中,回调函数是一个静态函数。需要调用类对象中的一个成员函数进行后续通知逻辑。 方案 定义全局指针,用于指向类对象this指针 static void *s_this_obj;类构造函数中,将全局指针指向所需类的this指针 s_this_obj this…

golang string、byte[]以及rune的基本概念,用法以及区别

在 Go 语言中,string、byte[] 和 rune 是处理文本和字符的三种不同数据类型。它们有各自的用途和特点,下面将详细介绍它们的基本概念、用法以及区别。 1. string 基本概念 字符串类型:string 是 Go 语言中的一种基本类型,用于表…

LangCell:用于细胞注释的语言-细胞预训练模型

细胞身份包括细胞的各种语义,包括细胞类型、pathway信息、疾病信息等。从转录组数据中了解细胞身份,例如注释细胞类型,是一项基础任务。由于语义是由人类赋予的,如果没有cell-label pair提供监督信号,AI模型很难有效地…

小项目——MySQL集训(学生成绩录入)

ddl语句 -- 创建学生信息表 CREATE TABLE students (student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 学生ID,name VARCHAR(50) NOT NULL COMMENT 学生姓名,gender ENUM(男, 女) NOT NULL COMMENT 性别,class VARCHAR(50) NOT NULL COMMENT 班级,registration_date DATE CO…

【杂记-浅谈EBGP外部边界网关协议、IBGP内部边界网关协议】

一、EBGP概述 EBGP,External Border Gateway Protocol,即外部边界网关协议,EBGP主要用于在不同自治系统(AS)之间交换路由信息,每个AS都有一个独特的AS号码,用于区分不同的自治系统。EBGP通过AS…

Redis实战—基于setnx的分布式锁与Redisson

本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于SETNX的分布式锁 SETNX锁代码实现 修改业务代码 SETNX锁误删问题 SETNX锁原子性问题 Lua脚本 编写脚本 代码优化 总结 Redisson 前言…

C++泛型编程之模板的使用

文章目录 1.模板的概念1.函数模板2.类模板3.模板特化4.模板元编程 2.模板的使用1.函数模板的使用2.类模板的使用3.模板特化4.模板参数推导5.普通函数和函数模板的调用规则1. 非模板函数优先2. 最佳匹配原则3. 显式模板参数指定4. 函数模板特化5. 重载决议示例 7.注意事项8.类模…

v-for中为什么要使用key

在Vue中,v-for指令用于循环遍历数组或对象,并为每个元素或属性生成相应的DOM元素或组件实例。当使用v-for循环渲染时,Vue会尽量复用已有的元素,而不是重新创建。为了实现这个复用机制,Vue会根据每个元素的key来跟踪它们…

基于STM32的温湿度检测TFT屏幕proteus恒温控制仿真系统

一、引言 本文介绍了一个基于STM32的恒温控制箱检测系统,该系统通过DHT11温湿度传感器采集环境中的温湿度数据,并利用TFT LCD屏幕进行实时显示。通过按键切换页面显示,通过按键切换实现恒温控制箱的恒温控制。为了验证系统的可靠性和稳定性&…

MongoDB的核心点是什么,选择是否使用!

MongoDB概述 定义: MongoDB是一个文档数据库,设计目的在于简化应用程序的开发和扩展。起源: 由DoubleClick创始人Dwight Merriman和Kevin O’Connor于2007年启动,以应对大规模流量需求。 MongoDB发展历程 开发背景: 由于关系型数据库无法满足DoubleCl…

在 TS 中使用 Manifold 建模

一 Manifold 是什么 1.1 简介 Manifold 是一个几何处理库,专注于高效、可靠的布尔运算和几何操作。它主要用于3D建模和计算几何领域,提供了高性能的几何算法,适用于需要精确几何计算的应用场景。 1.2 主要特点 高效的布尔运算&#xff1a…

Lombok的hashCode方法

Lombok对于重写hashCode的算法真的是很经典,但是目前而言有一个令人难以注意到的细节。在继承关系中,父类的hashCode针对父类的所有属性进行运算,而子类的hashCode却只是针对子类才有的属性进行运算,立此贴提醒自己。 目前重写ha…

png格式快速压缩该怎么做?在电脑压缩png图片的方法

png格式的图片如何快速压缩变小呢?现在网络的不断发展,图片是日常用来分享展示内容的一种常用手段,其中使用最多的一种图片格式就是png,png格式具有无损压缩支持透明底的特性,在很多的场景下都会使用。 现在图片的清晰…

本周AI动态:生成型AI的命运掌握在法院手中

本周AI领域发生了音乐公司指控两家开发AI歌曲生成器的初创公司Udio和Suno侵犯版权的事件。 美国音乐唱片行业协会(RIAA)周一宣布,由索尼音乐娱乐公司、环球音乐集团、华纳唱片公司等发起的诉讼已经提起。诉讼声称,Udio和Suno在未…

乒乓征途:开球网 跨越积分鸿沟的热爱与挑战

乒乓征途:跨越积分鸿沟的热爱与挑战 在乒乓球这项集速度、技巧与策略于一体的运动中,我以一名业余爱好者的身份,勇敢地踏上了开球网这一竞技的广阔舞台。这里,积分不仅是衡量实力的标尺,更是通往更高层次比赛的通行证…

贷款承诺状态映射参数表,用于加工的提示信息

在设计贷款承诺状态映射参数表时,目的是将贷款的不同状态映射为相应的提示信息,以便于系统能够自动生成和发送通知给相关的借款人或银行员工。以下是一个简化的参数表示例,用于指导贷款状态的加工和提示信息生成: | 状态代码 |…

Arduino - 线性执行器(支撑或滑杆)

Arduino - 线性执行器(支撑或滑杆) Arduino - 执行器 In this tutorial, we are going to learn: 在本教程中,我们将学习: How linear actuator works 线性执行器的工作原理How to make linear actuator extend or retract. 如何使线性执行器伸展或缩…

speakTTS文字转语音播放功能

场景: speak-tts 文字转换语音的使用播放、暂停、恢复 安装 npm install speak-tts 引入 import Speech from ‘speak-tts’ 需求: 1.多条播报内容需要一条一条的播报 一进入页面就开始播报(数组的形式 后台返回) 2.暂停之后 在点…

Java AWT基础—创建一个简单的应用程序

目录 背景: 代码展示: 代码详解: AWT和Swing的区别: 总结: 背景: 在Java中,AWT(Abstract Windows Toolkit)是最早的图形月用户界面(GUI1)工具包,虽然随着Swing的出现,AWT的使用有所减少,但了解AWT基…

百元蓝牙耳机哪款性价比高?盘点性价比高的百元蓝牙耳机品牌

在如今快节奏的生活中,蓝牙耳机已经成为人们日常生活中不可或缺的配件。然而,市面上百元左右性价比高的蓝牙耳机琳琅满目,消费者往往难以选择到一款质量好、耐用的产品。我们希望可以为广大消费者提供一些参考和建议,接下来&#…