GDPU Java 天码行空4

文章目录

  • 一、实验目的
  • 二、实验内容及要求
  • 三、实验内容及要求
    • 1. 设计AnimalTool工具类,实现eat()函数多态性
      • 💖 AnimalDemo.java
      • 🌸 运行结果
    • 2. 是猫是狗
      • 💖 DuoTaiDemo5.java
      • 🌸 运行结果
    • 3. 太会了
      • 💖 DuoTaiTest4.java
      • 🌸 运行结果
    • 4. 课程成绩等级
      • 💖 PolymorphismTest.java
      • 🌸 运行结果
    • 5. 图形面积周长
      • 💖 Main.java
      • 🌸 运行结果

一、实验目的

1.掌握抽象类
2.掌握接口定义与实现方法。
3.掌握多接口。
4.掌握接口与抽象类的区别。

二、实验内容及要求

包含有抽象方法的类叫作抽象类 , 抽象类只定义它的所有子类共享的通用格式 , 至 于实现的细节 , 则由它的具体子类来完成。抽象类在声明时需要以 abstract 加以修饰。

abstract class 类名 {}

抽象方法也是用 abstract 加以修饰 , 抽象方法定义时在其方法头后面只有一个分号 , 而没有定义方法体。

abstract 返回类型       方法名 ( 参数表 ):

超类的抽象方法是由子类在继承的时候来实现的 , 当一个子类继承一个抽象类时 ,它必须实现超类中所有的抽象方法 , 否则这个子类也必须被标识为 abstract 类型。因为 在一个类中 , 只要有一个抽象方法存在 , 该类就必须声明为 abstract 类。

注意 : 抽象类是不能实例化的 , 如果用 new 去创建一个抽象类的对象 , 会产生编译错误。另外 , 包含抽象方法的类必须声明成抽象类 , 然而一个不包含任何抽象方法的类 , 也是可以声明成抽象类的。

三、实验内容及要求

1. 设计AnimalTool工具类,实现eat()函数多态性

💖 AnimalDemo.java

class Animal
{void eat(){System.out.println("动物吃饭");}
}class Cat extends Animal
{void eat(){System.out.println("猫猫吃鱼");}
}class Dog extends Animal
{void eat(){System.out.println("狗狗吃骨头");}
}class AnimalTool
{private AnimalTool(){}public static void feed(Animal a){a.eat();}
}public class AnimalDemo
{public static void main(String[] args){Animal c = new Cat();Animal d = new Dog();AnimalTool.feed(c);AnimalTool.feed(d);}
}

🌸 运行结果

在这里插入图片描述

2. 是猫是狗

💖 DuoTaiDemo5.java

class Animal
{public void eat(){}
}class Dog extends Animal
{public void eat(){}public void lookDoor(){}
}class Cat extends Animal
{public void eat(){}public void playGame(){}
}class DuoTaiDemo5
{public static void main(String[] args){// 内存中的是狗Animal a = new Dog();Dog d = (Dog) a;// 内存中是猫a = new Cat();Cat c = (Cat) a;// 内存中是猫Dog dd = (Dog) a;}
}

🌸 运行结果

尽管继承自相同的父类,两子类也不能随意做类型转换,猫不可能变成狗
在这里插入图片描述

3. 太会了

💖 DuoTaiTest4.java

class A
{public void show(){show2();}public void show2(){System.out.println("我");}
}class B extends A
{/*public void show() {show2();}*/public void show2(){System.out.println("爱");}
}class C extends B
{public void show(){super.show();}public void show2(){System.out.println("你");}
}public class DuoTaiTest4
{public static void main(String[] args){A a = new B();a.show();B b = new C();b.show();}
}

🌸 运行结果

爱
你

4. 课程成绩等级

设计 3 个类 , 分别是学生类 Student, 本科生类 Undergaduate, 研究生类 Postgraduate, 其中 Student 类是一个抽象类 , 它包含一些基本的学生信息如姓名、所学课程、课程成绩等 , 而 Undergraduate 类和 Postgraduate 都是 Student 类的子类 , 它们之间的主要差别是计算课程成绩等级的方法有所不同 , 研究生的标准要比本科生的标准高一些 , 如表 1 所示。
在这里插入图片描述
假设某班级里既有本科生也有研究生 , 请编写程序统计出全班学生的成绩等级并显示出来。此题关键是设计一个学生数组 , 既能存放本科生对象 , 又能存放研究生对象。

💖 PolymorphismTest.java

温馨提示:搜填空即可找到修改的代码

//import java._____9____________; //填空
import java.util.*;//导java.util包下的所有类,不过这里并没有什么卵用abstract class Student
{final static int CourseNo = 3;private String name;private String type;private int[] courses;private String courseGrade;public Student(){}public Student(String name, String type){this.name = name;this.type = type;
//		courses = new int[_____2_____]; //填空courses = new int[CourseNo];courseGrade = "";}public abstract void calculateGrade();public String getName(){return name;}public String getType(){return type; // 返回学生类型}public String getCourseGrade(){return courseGrade;}public int getCourseScore(int courseNumber){return courses[courseNumber];}public void setName(String name){this.name = name;}public void setType(String type){this.type = type;}public void setCourseScore(int courseNumber, int courseScore){
//		______4_______;//按课程索引号设置课程成绩 //填空courses[courseNumber] = courseScore;// 按课程索引号设置课程成绩}public void setCourseGrade(String courseGrade){this.courseGrade = courseGrade;}
}//class Postgraduate ______5_____ Student {  //填空
class Postgraduate extends Student
{public Postgraduate(String name){
//		___6_______(name,"研究生");	 //填空super(name, "研究生");}public void calculateGrade(){int total = 0;double average = 0;for (int i = 0; i < CourseNo; i++){total = total + getCourseScore(i);}average = total / CourseNo;String currentGrade = "";
//		   if (_____7________){ //填空if (average >= 90 && average <= 100){currentGrade = "优秀";} else if (average >= 80 && average < 90){currentGrade = "良好";} else if (average >= 70 && average < 80){currentGrade = "一般";} else if (average >= 60 && average < 70){currentGrade = "及格";} else{currentGrade = "不及格";}setCourseGrade(currentGrade);}
}class Undergraduate extends Student
{public Undergraduate(String name){
//        super(name,_______8______);//填空super(name, "本科生");}public void calculateGrade(){int total = 0;double average = 0;for (int i = 0; i < CourseNo; i++){total = total + getCourseScore(i); // 累加各门课程成绩};average = total / CourseNo;String currentGrade = "";if (average >= 80 && average < 100){currentGrade = "优秀";} else if (average >= 70 && average < 80){currentGrade = "良好";} else if (average >= 60 && average < 70){currentGrade = "一般";} else if (average >= 50 && average < 60){currentGrade = "及格";} else{currentGrade = "不及格";}setCourseGrade(currentGrade);}
}public class PolymorphismTest
{public static void main(String[] args){// TODO Auto-generated method stub
//		 ____10______ studentArray = new Student[5];//填空
//		____11______ 	 //本科生陈建平
//		____12______	//本科生鲁向东
//		____13______	//研究生匡晓华
//		____14______	//本科生周丽娜
//		____15______	//研究生梁欣欣Student[] studentArray = new Student[5];studentArray[0] = new Undergraduate("陈建平"); // 本科生陈建平studentArray[1] = new Undergraduate("鲁向东"); // 本科生鲁向东studentArray[2] = new Postgraduate("匡晓华"); // 研究生匡晓华studentArray[3] = new Undergraduate("周丽娜"); // 本科生周丽娜studentArray[4] = new Postgraduate("梁欣欣"); // 研究生梁欣欣for (int i = 0; i < studentArray.length; i++){studentArray[i].setCourseScore(0, 87);studentArray[i].setCourseScore(1, 90);studentArray[i].setCourseScore(2, 78);}for (int i = 0; i < 5; i++){studentArray[i].calculateGrade();}System.out.println("姓名" + "     类型" + "    成绩");System.out.println("-----------------------");for (int i = 0; i < 5; i++){System.out.println(studentArray[i].getName() + "   " + studentArray[i].getType() + "  "+ studentArray[i].getCourseGrade());}}
}

🌸 运行结果

在这里插入图片描述

5. 图形面积周长

💖 Main.java

类的命名可以小改一下

//定义一个抽象类Shapes,表示形状的基类
abstract class Shapes
{// 定义形状的公共属性:x和y坐标,宽度和高度public int x, y;public int width, height;// Shapes类的构造方法,初始化形状的位置和大小public Shapes(int x, int y, int width, int height){this.x = x;this.y = y;this.width = width;this.height = height;}// 定义一个抽象方法,计算形状的面积public abstract double getArea();// 定义另一个抽象方法,计算形状的周长public abstract double getPerimeter();
}//定义一个Circle类,继承自Shapes类,表示圆形
class Circle extends Shapes
{// 定义圆形的公共属性:半径public double radius;// Circle类的构造方法,初始化圆形的位置和大小public Circle(int x, int y, double radius){// 调用父类的构造方法,设置位置super(x, y, 0, 0);// 设置圆形的半径this.radius = radius;}// 实现抽象方法getArea,计算圆形的面积public double getArea(){return Math.PI * radius * radius;}// 实现抽象方法getPerimeter,计算圆形的周长public double getPerimeter(){return 2 * Math.PI * radius;}
}//定义一个Rectangle类,继承自Shapes类,表示矩形
class Rectangle extends Shapes
{// Rectangle类的构造方法,初始化矩形的位置和大小public Rectangle(int x, int y, int width, int height){// 调用父类的构造方法,设置位置和大小super(x, y, width, height);}// 实现抽象方法getArea,计算矩形的面积public double getArea(){return width * height;}// 实现抽象方法getPerimeter,计算矩形的周长public double getPerimeter(){return 2 * (width + height);}
}//定义一个Demo类,用于演示如何使用Shapes类
public class Main
{// Demo类的主方法,程序的入口点public static void main(String[] args){// 创建一个Rectangle对象,并调用其方法Shapes s1 = new Rectangle(2, 3, 4, 5);s1.getArea();s1.getPerimeter();// 打印矩形的面积和周长System.out.println("矩形面积:" + s1.getArea() + ",周长:" + s1.getPerimeter());// 创建一个Circle对象,并调用其方法Shapes s2 = new Circle(2, 2, 1);// 圆心:(2,2) 半径:1s2.getArea();s2.getPerimeter();// 打印圆形的面积和周长System.out.println("圆面积:" + s2.getArea() + ",周长:" + s2.getPerimeter());}
}

🌸 运行结果

在这里插入图片描述

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

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

相关文章

国内IP地址切换排行榜软件大全

随着互联网的飞速发展&#xff0c;IP地址切换技术在日常工作和生活中扮演着越来越重要的角色。无论是为了网络安全、访问特定地区网站&#xff0c;还是进行市场调研、网络爬虫等&#xff0c;IP地址切换都成为了不可或缺的工具。虎观代理将为您介绍国内较受欢迎的IP地址切换软件…

B004-springcloud alibaba 服务容错 Sentinel

目录 高并发带来的问题服务雪崩效应常见容错方案常见的容错思路隔离超时限流熔断降级 常见的容错组件 Sentinel入门什么是Sentinel微服务项目集成Sentinel核心库安装Sentinel控制台实现一个接口的限流 Sentinel的概念和功能基本概念重要功能 Sentinel规则流控规则三种流控模式三…

深度学习——线性代数相关知识

线性代数基础知识 一、线性代数基础知识1、标量2、向量3、矩阵4、张量5、点积6、向量—矩阵积7、矩阵—矩阵乘法 二、小结 一、线性代数基础知识 本节将介绍简要地回顾一下部分基本线性代数内容&#xff0c;线性代数中的基本数学对象、算术和运算&#xff0c;并用数学符号和相…

基于SpringBoot的高校办公室行政事务管理系统

采用技术 基于SpringBoot的高校办公室行政事务管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 功能清单 教师信息管理 办公室管理 办公物资管…

软文营销应该怎么做?软文营销的关键

软文本营销不是一个简单的写作和发送文章的过程&#xff0c;而是一个从早期准备到软文本写作再到效果评估的综合运营管理过程。 步骤一&#xff1a;目标明确 目标是指目标用户&#xff0c;找出目标用户是什么样的群体&#xff0c;从而根据用户群体的画像进行软文准备。 步骤二…

3000+人使用,这套人力资源数据分析工具还能这么用

中国科学院自动化研究所&#xff08;以下简称“自动化所”&#xff09;成立于1956年&#xff0c;是中国科学院率先布局成立的“人工智能创新研究院”的总体牵头单位&#xff0c;是中国最早开展智能科学与技术基础理论、关键技术和创新性应用研究的科研机构&#xff0c;也是中国…

ADAS-AEB系统详解

ADAS-AEB系统详解 AEB即自动紧急制动&#xff08;Automatic Emergency Braking&#xff09;&#xff0c;其通过雷达、摄像头共同监测前方车辆以及行人情况&#xff0c;若探测到潜在碰撞风险&#xff0c;系统将采取相应预警及制动措施&#xff0c;从而避免发生碰撞或减轻碰撞损…

加速量产化节奏!移远通信5G RedCap模组RG255C-CN顺利通过SRRC认证

近日&#xff0c;移远通信5G RedCap模组产品再传喜讯——RG255C-CN顺利通过SRRC&#xff08;无线电型号核准&#xff09;认证测试&#xff0c;成为领先行业的轻量化5G产品。 此前&#xff0c;该模组也已通过NAL&#xff08;电信设备进网许可&#xff09;、CCC&#xff08;中国强…

DXP学习1-使用DXP软件创建工程并熟悉相关操作

目录 实验内容&#xff08;任务&#xff09; PCB项目文件及原理图文件的创建及保存&#xff1a; 熟悉窗口界面、主菜单、各工具栏及图纸参数的设置&#xff1a; 首先先通过"纸张选择"做如下修改 修改纸张大小&#x1f447; 修改标题栏的格式&#x1f447; 修改…

生命源集团2024全球品牌发布会成功举办

生命源集团2024全球品牌发布会圆满落幕 3月20日&#xff0c;生命源集团在杭州隆重举办了主题为“生命源启&#xff0c;荣耀之巅”的2024全球品牌发布会。 活动伊始&#xff0c;嘉宾们陆续签到入场&#xff0c;现场气氛热烈而庄重。随后&#xff0c;生命源集团十二大事业部总裁…

6.2 ServiceNow 自动化测试框架 (ATF)

6.2 自动化测试框架 ATF 目录一、自动化测试框架 (ATF) 简介1. Automated Test Framework&#xff08;ATF&#xff09;2. 使用自动化测试框架 (ATF)的好处&#xff1a; 二、 ATF的测试类型1. 功能业务逻辑测试2. 回归测试3. 浏览器兼容性测试4. 服务器端 Jasmine测试 三、 ATF测…

详解:创业老阳推荐的Temu蓝海项目还能赚钱吗?

在当前全球化的背景下&#xff0c;跨境电商行业日益繁荣&#xff0c;成为了许多创业者关注的焦点。其中&#xff0c;Temu项目凭借其独特的商业模式和强大的市场潜力&#xff0c;备受瞩目。尤其是当知名创业导师老阳推荐Temu项目时&#xff0c;更是激起了广大创业者的热情和好奇…

机器人路径规划:基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

应急响应-Linux(1)

应急响应-Linux(1) 黑客的IP地址 思路&#xff1a; 一般系统中马之后会有进程连接黑客的主机&#xff0c;可以使用netstat -anpt查看下当前进程的连接&#xff0c;此处查看到没有后 &#xff0c;可以从系统服务开始查找&#xff0c;系统的服务日志一般都会保存相关访问信息&…

SAP CAP篇十五:写个ERP的会计系统吧,Part II

本文目录 本系列文章目标开发步骤数据库表设计初始数据初始数据&#xff1a;AccountCategories初始数据&#xff1a;AccountUsages初始数据&#xff1a;ChartOfAccounts初始数据&#xff1a;AccountSubjects Service 定义生成Fiori AppApp运行 本系列文章 SAP CAP篇一: 快速创…

P8597 [蓝桥杯 2013 省 B] 翻硬币 Python

[蓝桥杯 2013 省 B] 翻硬币 题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果…

【ppt技巧】PPT转换为图片,方法有哪些?

想要将ppt文件转换为图片&#xff0c;其实很简单&#xff0c;一起来看一下如何操作吧&#xff01; 方法一&#xff1a; 使用格式转换器&#xff0c;有些文件格式转换器&#xff0c;支持ppt转换为图片。 方法二&#xff1a; 不需要转换器&#xff0c;直接在ppt中进行操作即可…

可观测性体系建设后,该如何挖掘数据及工具价值?

在现代企业的运维管理中&#xff0c;构建高效且可靠的可观测性体系是保障系统稳定性和业务连续性的关键。然而&#xff0c;运维团队成员的技术能力参差不齐往往成为实现这一目标的障碍。尤其在处理复杂系统故障时&#xff0c;高度依赖专业知识和经验的可观测性工具很难被全员有…

j-vxe-table设置

1.设置按键回车箭头tab健设置 :mouse-config"{selected: true}" :keyboard-config"{ isArrow: true, isEnter: true, isEdit: true,isTab:true}" 2 表格编辑设置 :edit-config"{trigger: this.triggerFlag, mode: row, showIcon: false , active…

如何用 C++ 部署深度学习模型?

深度学习模型通常在诸如Python这样的高级语言中训练和验证&#xff0c;但在实际生产环境部署时&#xff0c;往往需要更高的执行效率和更低的资源占用。C作为一款性能卓越、低级别的编程语言&#xff0c;是部署深度学习模型的理想选择之一。本文将详细介绍如何在C环境下加载和运…