JAVA—实验3 继承与多态

news2024/12/28 7:01:20

一、实验目的
1.掌握类的继承机制
2.掌握抽象类的定义方法
2.熟悉类中成员变量和方法的访问控制
3.熟悉成员方法或构造方法的多态性
二、实验内容

1. Circle类及其子类

【问题描述】
实现类Circle,半径为整型私有数据成员
1)构造方法:参数为半径(整型数据)。
2)成员方法:标准方法;计算周长的方法、计算面积的方法;toString()方法返回将半径、周长和面积连接的长字符串。
派生类Circle获得圆柱体类,要求:
1)添加属性成员圆柱的高(整型数据)。
2)添加标准方法、构造方法、计算圆柱体体积的方法。
定义测试类,输入半径和高,分别实例化Circle类和圆柱体类,按要求输出圆和圆柱体的信息。结果保留2位小数
【输入形式】
两行,第一行为圆类对象的半径,第二行为圆柱体类对象的半径和高
【输出形式】
两行,第一行输出圆类对象的相关信息,第二行输出圆柱体对象的相关信息
在这里插入图片描述

运行结果:

在这里插入图片描述

源码:

package circle1;

import java.text.DecimalFormat;
import java.util.Scanner;

public class Circle1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int rad = in.nextInt();
		Cir1 a1 = new Cir1(rad);
		a1.show();
		int c = in.nextInt();
		int h = in.nextInt();
		Vol a2 = new Vol(c, h);
		a2.show();
		in.close();
	}
}

class Cir1 {
	private int rad;
	DecimalFormat df = new DecimalFormat("#.00");

	public double perimeter() {
		return Math.PI * 2 * rad;
	}

	public double area() {
		return rad * rad * Math.PI;
	}

	public String toString() {
		return "radium=" + rad + " perimeter=" + df.format(perimeter()) + " area=" + df.format(area());
	}

	public void show() {
		System.out.printf(toString());
	}

	public Cir1(int rad) {
		this.rad = rad;
	}
}

class Vol extends Cir1 {
	private int h;

	public Vol(int rad, int h) {
		super(rad);
		this.h = h;
	}

	public double volume(int h) {
		return area() * h;
	}

	public String toString() {
		return  super.toString()+" volume=" + df.format(volume(h));
	}

	public void show() {
		System.out.printf(toString());
	}

}

2.抽象类Shape

【问题描述】
定义抽象类Shape,圆形Circle、Rectangle为子类。
Shape类有一个数据成员(double型),定义带参构造方法、抽象方法calArea()(返回值类型:double)
在Circle、Square两个类中,实现calArea()方法。
在Rectangle类中,增加一个数据成员(double型),实现calArea()方法。
编写测试类:定义一个Shape类引用shape,分别指向一个Circle类、Rectangle类对象,利用多态,计算各平面图形的面积并输出。(结果保留2位小数)
要求:
1.数据成员全部为私有成员;
2.数据从键盘输入,调用带参构造方法创建子类对象。
提示:使用Math类的PI
【输入形式】两行:分别是为圆的半径、长方形的长和宽
【输出形式】两种平面图形的面积
在这里插入图片描述

运行结果:

在这里插入图片描述

源码:

package area;

import java.text.DecimalFormat;
import java.util.Scanner;

public class Area {

	public static void main(String[] args) {
		DecimalFormat df = new DecimalFormat("#.00");
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		double a1 = in.nextDouble();
		Shape x1 = new Circle(a1);
		System.out.printf(df.format(x1.calArea()));
		double a2 = in.nextDouble();
		double a3 = in.nextDouble();
		Shape x2 = new Rectangle(a2,a3);
		System.out.printf(df.format(x2.calArea()));
		in.close();
	}

}
abstract class Shape{
	protected double rad;
	public Shape(double rad) {
		this.rad = rad;
	}
	abstract public double calArea();
}
class Circle extends Shape{
	public Circle(double rad) {
		super(rad);
	}
	public double calArea() {
		return Math.PI*rad*rad;
	}
}
class Rectangle extends Shape{
	private double k;
	public Rectangle(double c ,double k) {
		super(c);
		this.k = k;
	}
	public double calArea() {
		return rad*k;
	}
}

3. 抽象类-员工类

【问题描述】
编写抽象类-员工类,有姓名、工号(int型)、基本工资(double型)属性,计算工资为抽象方法,由员工类派生出教师、实验员和行政人员三个类。教师有课酬标准(整型,元/小时)和月课时(整型),月工资=基本工资+课酬标准月课时;实验员有月在岗小时(整型),月工资=基本工资+50每月在岗小时;行政人员有岗贴(double型),月工资=基本工资+岗贴。请编写各类定义,并编写测试类(主动类),在主动类中定义一个打印方法,形参为员工类引用,在主方法中分别创建三个对象,调用打印方法,根据不同的实参打印出不同类对象的信息。
【输入形式】
三行,第一行为教师信息,第二行为实验员信息,第三行为行政人员信息
【输出形式】
三类人员的相关信息
在这里插入图片描述

运行结果:

在这里插入图片描述

源码:

package person_inform;

import java.util.Scanner;

public class Person_Inform {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		String name = in.next();
		int empNo = in.nextInt();
		double baseSalary = in.nextDouble();
		int hourlyFee = in.nextInt();
		int monthlyHour = in.nextInt();

		String name1 = in.next();
		int empNo1 = in.nextInt();
		double baseSalary1 = in.nextDouble();
		int hourlyFee1 = in.nextInt();

		String name2 = in.next();
		int empNo2 = in.nextInt();
		double baseSalary2 = in.nextDouble();
		double allowance = in.nextDouble();
		System.out.println("teacher:");
		Pers t = new Teacher(name, empNo, baseSalary, hourlyFee, monthlyHour);
		System.out.println(t.toString());
		System.out.println("lab worker:");
		Pers l = new lab_Worker(name1, empNo1, baseSalary1, hourlyFee1);
		System.out.println(l.toString());
		System.out.println("staff:");
		Pers s = new Staff(name2, empNo2, baseSalary2, allowance);
		System.out.println(s.toString());
		in.close();
	}

}

abstract class Pers {
	private String name;
	private int empNo;
	protected double baseSalary;

	public Pers(String name, int empNo, double baseSalary) {
		this.name = name;
		this.empNo = empNo;
		this.baseSalary = baseSalary;
	}

	abstract public double salary();

	public String toString() {
		return "name:" + name + "\n" + "empNo:" + empNo + "\n" + "baseSalary:"
				+ baseSalary;
	}

}

class Teacher extends Pers {
	private int hourlyFee;
	private int monthlyHour;

	public Teacher(String name, int empNo, double baseSalary, int hourlyFee, int monthlyHour) {
		super(name, empNo, baseSalary);
		this.hourlyFee = hourlyFee;
		this.monthlyHour = monthlyHour;
	}

	public double salary() {
		return baseSalary + hourlyFee * monthlyHour;
	}

	public String toString() {
		return super.toString()+"\n"+"hourlyFee:"+hourlyFee+"\n"+"monthlyHour:"+monthlyHour
				+"\n"+"salary:"+salary()+"\n";
	}

}

class lab_Worker extends Pers {
	private double hourlyFee;

	public lab_Worker(String name, int empNo, double baseSalary, int hourlyFee) {
		super(name, empNo, baseSalary);
		this.hourlyFee = hourlyFee;
	}

	public double salary() {
		return baseSalary + hourlyFee * 50;
	}

	public String toString() {
		return super.toString()+"\n"+"hourlyFee:"+hourlyFee+"\n"+"salary:"+salary()+"\n";
	}

}

class Staff extends Pers {
	private double allowance;

	public Staff(String name, int empNo, double baseSalary, double allowance) {
		super(name, empNo, baseSalary);
		this.allowance = allowance;
	}

	public double salary() {
		return baseSalary + allowance;
	}

	public String toString() {
		return super.toString()+"\n"+"allowance:"+allowance+"\n"+"salary:"+salary()+"\n";
	}
}

END:熬夜也要敲完,这是一场发际线与手速的竞争。

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

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

相关文章

留学文书可以彻底被AI取代吗?留学顾问是否会被AI逼到墙角?

近日,ChatGPT再次“进化”,其最新版本ChatGPT-4又掀高潮。其生产者OpenAI 称,“ChatGPT-4是最先进的系统,能生产更安全和更有用的回复。”和上一代相比,GPT-4拥有了更广的知识面和更强的解决问题能力,在创意…

IC698PSA350 GE Fanuc为RX7i系列生产的电源模块

IC698PSA350 GE Fanuc为RX7i系列生产的电源模块 IC698PSA350是一款 PAC系统 GE Fanuc为RX7i系列生产的电源模块。该模块提供5伏直流电、12伏直流电和-12伏直流电。此外,它还向背板上的模块发送逻辑电平序列信号。该模块插入主机架的插槽0。 IC698PSA350 模块的 在保…

【云计算与虚拟化】第三章 实验三 配置vSphere虚拟网络和iSCSI共享存储

实验3. 配置vSphere虚拟网络和iSCSI共享存储 一、配置vSphere虚拟网络的实验步骤 在 VMware Workstation 中为 ESXi 主机添加两块网卡 2.开启 ESXi 主机,使用 vSphere Client 连接到 ESXi 主机。选中 ESXi 主机 切换到“配置”栏,点击硬件→网络适配器…

计算机中存储器详解

文章目录 一、存储器的分类1. 按存储介质分类2. 按存取方式分类 二、存储器的层次结构三、CPU、缓存、主存、辅存之间的通信关系1. 缓存-主存层次2. 局部性原理3. 主存-辅存层次 一、存储器的分类 1. 按存储介质分类 2. 按存取方式分类 二、存储器的层次结构 在讲存储器的层次…

类和对象【2】默认成员函数

文章目录 引言构造函数定义默认构造函数及相关问题 析构函数拷贝构造定义使用时可能引发的问题 赋值运算符重载运算符重载赋值运算符重载 总结 引言 在上一篇文章中,初步介绍了类和对象:戳我看初识类和对象 不难发现,类类型极大的方便了用户…

【5.15】一、软件测试基础—软件测试概述

目录 1.3 软件测试概述 1.3.1 软件测试简介 1.3.2 软件测试的目的 1.3.3 软件测试的分类 1.3 软件测试概述 软件测试工作能保证软件产品的质量。 1.3.1 软件测试简介 IEEE:软件测试是使用人工或自动手段运行或测定某个系统的过程,其目的在于检验它…

mac读不到内置硬盘为什么 ntfs读取不了硬盘

电脑内置硬盘可用于启动电脑、存储文件、保存注册表信息等多项功能,一旦无法读取,轻则可能导致某个分卷无法使用,严重时会导致整台mac电脑无法开机停留在Logo界面。那么mac读不到内置硬盘为什么,ntfs读取不了硬盘是何原因&#xf…

【5.16】二、黑盒测试方法—等价类划分法

目录 2.1 等价类划分法 2.1.1 等价类划分法概述 2.1.2 实例:三角形问题的等价类划分 2.1.3 实例:余额宝提现的等价类划分 2.1 等价类划分法 等价类划分法是一种常用的黑盒测试方法,主张从大量的数据中选择一部分数据用于测试&#xff0…

微信小程序 nodejs+vue+uniapp学科竞赛作品管理系统java+python

每个系统也都将通过计算机进行整体智能化操作,对于基于微信小程序学科竞赛作品管理系统功能所牵扯的数据都是通过用户进行基于微信小程序学科竞赛作品管理系统等相关的数据信息内容、并且可以进行管理员在线处理首页、个人中心、用户管理、教师管理、辅导员管理、作…

IS420UCSBH1A 用于帮助实现控制器逻辑

通用电气公司的Mark VIe控制器IS420UCSBH1A类似于UCSC控制器,所有相同的一般信息都可以应用于UCSB模型。IS420UCSBH1A型号通常是一种紧凑型独立控制器,用于帮助实现控制器逻辑。 制造商通用电气与…类似马克维UCSC控制器产品类型Mark VIe、EX2100e或LS2…

JUC并发编程(一)

JUC并发编程 文章目录 JUC并发编程一、进程与线程1 进程2 线程3 进程与线程的对比4 并行与并发5 同步与异步 二、Java线程1 创建和运行线程2 查看进程线程的方法3 栈与栈帧4 线程中常见方法5 start()与run()6 sleep()与yield()7 线程优先级8 join()方法9 interrupt()方法10 使用…

软考初级程序员上午五单选(9)

1、在Windows中,用鼠标左键单击某应用程序窗口的最小化按钮后,该应用程序处于______的状态。 A.被强制关闭 B.不确定 C.被暂时挂起 D.在后台继续运行 2、将某ASCII字符采用偶校验编码(7位字符编码1位校验码…

【5.15】一、软件测试基础—软件测试与软件开发

目录 1.4 软件测试与软件开发 1.4.1 软件测试与软件开发的关系 1.4.2 常见的软件测试模型 1.4 软件测试与软件开发 软件开发是生产制造软件产品,软件测试是检验软件产品是否合格,两者密切合作才能保证软件产品的质量。 1.4.1 软件测试与软件开发的关…

CSAPP复习(2)

CH3 虽然x在rdi中 但是在赋值的时候已经把rdi给rax作为返回值了 第二个问是取他的低位 一定要把寄存器那个图搞明白。 画函数执行栈的情况: 常数100存在于代码段: CH8 进程 CH8--2信号 进程作业任务 进程与任务或作业管理教材【优质文档】 - 百度文库…

VMware Workstation 与 Device/Credential Guard 不兼容解决方案(亲测有效)

前言 VMware Workstation是由VMware公司开发的桌面虚拟化软件,它能够在一台物理计算机上模拟多个独立的虚拟计算机环境,每个虚拟计算机环境都可以运行一个独立的操作系统,并具有各自独立的应用程序和文件库,使得运行多个不同操作…

Hive on Spark调优(大数据技术7)

第7章 数据倾斜优化 7.1 数据倾斜说明 数据倾斜问题,通常是指参与计算的数据分布不均,即某个key或者某些key的数据量远超其他key,导致在shuffle阶段,大量相同key的数据被发往一个Reduce,进而导致该Reduce所需的时间远…

研报精选230518

目录 【行业230518华西证券】医药行业2023年中期投资策略报告:行业复苏势头显著,创新打开未来空间 【行业230518国金证券】半导体行业深度二:存储拐点将至,新需求点亮曙光 【行业230518太平洋】食品饮料行业23年中期策略&#xff…

chatgpt赋能Python-python3_5如何安装

Python3.5安装指南 Python是一种高级编程语言,它广泛用于Web开发、数据分析、机器学习等领域。在Python的众多版本中,Python3.5是最常用的版本之一。如果你正在考虑学习Python3.5或者需要使用Python3.5进行项目开发,那么接下来的安装指南将会…

管道通信,共享内存

什么是有名管道 有名管道(Named Pipe)是一种特殊的文件类型,也称为 FIFO。它提供了一种进程间通信的机制,允许不相关的进程通过读写共享的文件来交换数据。 与普通文件不同的是,有名管道在文件系统中存在一个路径名&…

【云计算与虚拟化】第四章 实验二 vCenter Server网络部署及基本操作

实验二 vCenter Server网络部署及基本操作 一、实验内容 通过vSphere client 客户端登陆vCenter服务器,为新建的虚拟机Windows7 激活,并修改计算机名为姓名拼音的首字母-学号通过vSphere client 客户端登陆vCenter服务器,将虚拟机window…