JAVA—实验4 继承、接口与多态

news2024/11/23 18:41:23

一、实验目的

  1. 掌握类的继承机制
  2. 掌握接口的定义方法
  3. 熟悉成员方法或构造方法多态性
    二、实验内容

1.卖车-接口与多态编程

【问题描述】
(1) 汽车接口(Car):有两个方法, getName()、getPrice()(接口源文件可以自己写,也可以直接从题目中下载)
(2) BMW类,实现汽车接口
(3) 奇瑞QQ类,实现汽车接口
(4) 桑塔那类,实现汽车接口
(4) 汽车出售店(CarShop)类,有成员变量:count(售出数量) 和total(总价),有方法:
void sellCar(Car car); (调用方法获取售出车的车型、售价;获取售出数量及总价)
int getCount(); int getTotal();
(5) 编写测试类:卖出一辆BMW、一辆奇瑞QQ、一辆桑塔那,输出结果.
【输入形式】

【输出形式】
卖出的第一辆车车型、单价
汽车店的总收入、卖出车数量
卖出的第二辆车车型、单价
汽车店的总收入、卖出车数量
卖出的第三辆车车型、单价
汽车店的总收入、卖出车数量
在这里插入图片描述

运行结果:

在这里插入图片描述

源码:

package buycar;

public class BuyCar {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CarShop c1 = new CarShop();
		c1.sellCar(new BMW());
		c1.sellCar(new CherryQQ());
		c1.sellCar(new Santana());
	}

}

interface Car {
	public String getName();

	public int getPrice();
}

class BMW implements Car {
	public String getName() {
		return "BMW";
	}

	public int getPrice() {
		return 300000;
	}
}

class CherryQQ implements Car {
	public String getName() {
		return "CherryQQ";
	}

	public int getPrice() {
		return 20000;
	}
}

class Santana implements Car {
	public String getName() {
		return "Santana";
	}

	public int getPrice() {
		return 280000;
	}
}

class CarShop {
	private int count = 0;
	private int total = 0;

	public void sellCar(Car car) {
		count++;
		total += car.getPrice();
		System.out.println("car model:" + car.getName() + " price:" + car.getPrice() + "\n" + "total income:" + total
				+ " count of sold:" + count);
	}
}

2.继承--Student类及其子类

【问题描述】
(1)声明Student类:
属性包括:学号、姓名、英语成绩、数学成绩、Java成绩、总成绩(成绩为double型,学号、姓名为String类型)
方法包括:构造方法、标准方法、toString()方法、compare()方法(比较两个学生的总成绩,结果分大于、等于、小于)、sum()方法(计算总成绩)、testScore()方法(计算评测成绩)
注:评测成绩取三门课程成绩的平均分(评测成绩保留2位小数)
(2)声明StudentSJ(参与综合设计的学生)类为Student的子类,增加任务属性,并重写testScore()方法(计算评测成绩,评测成绩=三门课的平均分+3)
(3)声明StudentZZ(综合设计组长)类为Student的子类,增加责任属性,并重写testScore()方法(计算评测成绩,评测成绩=三门课的平均分+5)
(4)声明测试类:在主方法中声明Student类数组(含3个元素),生成3个对象存入数组,其中一个为Student类的对象,一个StudentSJ类的对象,一个StudentZZ类的对象,将方法testScore()发送给数组中的每一个元素,输出结果,并分析具体执行的是哪一个类中的方法。比较StudentSJ类对象和StudentZZ类对象的总成绩,输出结果。
【输入形式】
三行:第一行,学生的信息;
第二行,参加综合设计的学生信息
第三行,综合设计组长信息
【输出形式】
学生对象的详细信息
综合设计学生对象的详细信息
综合设计组长对象的详细信息
StudentSJ类对象和StudentZZ类对象的总成绩的比较结果
在这里插入图片描述

运行结果:

在这里插入图片描述

源码:

package studentDome;

import java.math.BigDecimal;
import java.util.Scanner;

public class StudentDome {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new_student[] stu = new new_student[3];
		Scanner in = new Scanner(System.in);// 定义对象in
		// 输入第一个人的信息(new_student类)
		String stuID1 = in.next();
		String name1 = in.next();
		double english_garde1 = in.nextDouble();
		double math_garde1 = in.nextDouble();
		double Java_garde1 = in.nextDouble();
		in.nextLine();// 消除空格

		// 输入第二个人的信息(StudentSJ类)
		String stuID2 = in.next();
		String name2 = in.next();
		double english_garde2 = in.nextDouble();
		double math_garde2 = in.nextDouble();
		double Java_garde2 = in.nextDouble();
		String str = in.next();// 输入的字符串
		in.nextLine();// 消除空格

		// 输入第三个人的信息(StudentZZ类)
		String stuID3 = in.next();
		String name3 = in.next();
		double english_garde3 = in.nextDouble();
		double math_garde3 = in.nextDouble();
		double Java_garde3 = in.nextDouble();
		String str1 = in.next();// 输入的字符串

		stu[0] = new new_student(name1, stuID1, english_garde1, math_garde1, Java_garde1);// 存入数组第一位
		stu[0].show();

		stu[1] = new StudentSJ(name2, stuID2, english_garde2, math_garde2, Java_garde2, str);// 存入数组第二位
		stu[1].show();

		stu[2] = new StudentZZ(name3, stuID3, english_garde3, math_garde3, Java_garde3, str1);// 存入数组第三位
		stu[2].show();

		new_student.compare(stu[1], stu[2]);// 比较StudentSJ对象总分与StudentZZ对象总分的大小

		in.close();
		stu.clone();
	}

}

//Student类
class new_student {

	private String name;
	private String stuID;
	private double english_garde;
	private double math_garde;
	private double Java_garde;
	private double total_garde;

	// 带参构造
	public new_student(String name, String stuID, double english_garde, double math_garde, double Java_garde) {
		this.name = name;
		this.stuID = stuID;
		this.english_garde = english_garde;
		this.math_garde = math_garde;
		this.Java_garde = Java_garde;
	}

//	//标准方法——题目要求,但没用上,就挂起来吧
//	public String getName() {
//		return name;
//	}
//
//	public void setName(String name) {
//		this.name = name;
//	}
//
//	public String getStuID() {
//		return stuID;
//	}
//
//	public void setStuID(String stuID) {
//		this.stuID = stuID;
//	}
//
//	public double getEnglish_garde() {
//		return english_garde;
//	}
//
//	public void setEnglish_garde(double english_garde) {
//		this.english_garde = english_garde;
//	}
//
//	public double getMath_garde() {
//		return math_garde;
//	}
//
//	public void setMath_garde(double math_garde) {
//		this.math_garde = math_garde;
//	}
//
//	public double getJava_garde() {
//		return Java_garde;
//	}
//
//	public void setJava_garde(double java_garde) {
//		Java_garde = java_garde;
//	}
//
//	public double getTotal_garde() {
//		return total_garde;
//	}
//
//	public void setTotal_garde(double total_garde) {
//		this.total_garde = total_garde;
//	}
	// toString()方法—返回字符串
	public String toString() {
		return "stuNo:" + stuID + " name:" + name + " english:" + english_garde + " math:" + math_garde + " Java:"
				+ Java_garde + "\n" + "testScore:" + testScore();
	}

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

	// 静态compare()方法作比较—直接输出比较结果
	public static void compare(new_student stu1, new_student stu2) {
		if (stu1.sum() > stu2.sum())
			System.out.println(stu2.name + "'s total score is less than " + stu1.name);
		else if (stu1.sum() < stu2.sum())
			System.out.println(stu1.name + "'s total score is less than " + stu2.name);
		else
			System.out.println(stu1.name + "'s total score is equal" + stu2.name);
	}

	// 求和函数sum()
	public double sum() {
		total_garde = english_garde + math_garde + Java_garde;
		return total_garde;
	}

//	计算评测成绩
	public double testScore() {
		// 计算评测成绩保留两位小数
		BigDecimal bg = new BigDecimal((sum() / 3));
		return bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

}

//StudentSJ类(参与综合设计的学生)
class StudentSJ extends new_student {
	private String str;

	// 带参构造——继承父类
	public StudentSJ(String name, String stuID, double english_garde, double math_garde, double Java_garde,
			String str) {
		super(name, stuID, english_garde, math_garde, Java_garde);// 继承父类——修改父类私有变量值
		this.str = str;
	}

	// 重写testScore()方法
	public double testScore() {
		return super.testScore() + 3.0;

	}

	// 重新toString()方法
	public String toString() {
		return super.toString() + " task:" + str;
	}
}

//StudentZZ类(综合设计组长)
class StudentZZ extends new_student {
	private String str;

	// 带参构造——继承父类
	public StudentZZ(String name, String stuID, double english_garde, double math_garde, double Java_garde,
			String str) {
		super(name, stuID, english_garde, math_garde, Java_garde);// 继承父类——修改父类私有变量值
		this.str = str;
	}

	// 重写testScore()方法
	public double testScore() {
		return super.testScore() + 5.0;
	}

	// 重新toString()方法
	public String toString() {
		return super.toString() + " duty:" + str;
	}
}

3.编程实现运算类—工厂设计模式

【问题描述】
(1)定义抽象类Operation,有double型数据成员numberA、numberB,有抽象方法getResult()
(2)定义Operation的4个子类,分别实现加、减、除运算,二个数的平均数运算
(3)定义类OperationFactory:有静态方法Operation createOperate(String operate); 根据形参operate的值创建相应加、减、除、平均值类的对象,赋给抽象类引用后返回
(4)定义测试类及主方法:用户从键盘输入运算数及运算符,根据运算符调用OperationFactory类的静态方法,创建相应实例,设置运算数,输出运行结果
【输入形式】
一个表达式(数据与运算符之间空格间隔)
【输出形式】
表达式运算的结果,保留3位小数
【样例输入】
在这里插入图片描述

运行结果:

在这里插入图片描述

源码:

package factoryModeDome;

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

public class FactoryModeDome {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		Double numberA = in.nextDouble();
		String operator = in.next();
		Double numberB = in.nextDouble();
		
		OperationFactory.createOperate(operator,numberA,numberB).getResult();
		
		in.close();
	}

}

abstract class Operation {
	DecimalFormat df = new DecimalFormat("#.000");
	protected double numberA;
	protected double numberB;

	public Operation(double numberA,double numberB) {
		this.numberA = numberA;
		this.numberB = numberB;
	}
	
	public abstract void getResult();
}

class Add extends Operation {// 加法
	public Add(double numberA,double numberB) {
		super(numberA,numberB);
	}
	public void getResult() {
		System.out.println("Result:" + df.format(numberA + numberB));
	}
}

class Subtraction extends Operation {// 减法
	public Subtraction(double numberA,double numberB) {
		super(numberA,numberB);
	}
	public void getResult() {
		System.out.println("Result:" + df.format(numberA - numberB));
	}
}

class Division extends Operation {// 除法
	public Division(double numberA,double numberB) {
		super(numberA,numberB);
	}
	public void getResult() {
		if (super.numberB == 0)
			System.out.println("Devide by zero!");
		else {
			System.out.println("Result:" + df.format(numberA / numberB));
		}
	}
}

class Average extends Operation {// 平均值
	public Average(double numberA,double numberB) {
		super(numberA,numberB);
	}
	public void getResult() {
		System.out.println("Result:" + df.format((numberA + numberB) / 2));
	}
}

class OperationFactory {
	public static Operation createOperate(String operate,double numberA,double numberB) {
		Operation op = null;
		switch (operate) {
		case "+":
			op = new Add(numberA,numberB);
			break;
		case "-":
			op = new Subtraction(numberA,numberB);
			break;
		case "/":
			op = new Division(numberA,numberB);
			break;
		case "avg":
			op = new Average(numberA,numberB);
			break;
		}
		return op;
	}
}

END:对于小肚鸡肠的家伙咋不要理他。

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

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

相关文章

2024总统大选,成为“关乎比特币未来的公投”?背后是怎样的政治抱负?

在今年的迈阿密比特币大会上&#xff0c;Robert F.Kennedy Jr和Vivek Ramaswamy相继发布声明表示&#xff0c;他们将在2024年初选前接受比特币&#xff08;BTC&#xff09;的捐款。 RFK Jr作为美国前总统约翰肯尼迪的侄子&#xff0c;是第一个公开接受Crypto的总统候选人&#…

chatgpt赋能Python-pythons_9_98_987

用Python计算s998987的方法及重要性分析 介绍 Python是一种开源的高级编程语言&#xff0c;它被广泛应用于数据处理、web开发和人工智能等领域。它的简洁、易读易写的语法使得很多程序员喜爱使用它来完成各种工作。本文将介绍如何用Python计算一个简单的数学表达式&#xff1…

微服务基础环境搭建--和创建公用模块

目录 微服务基础环境搭建 创建父工程&#xff0c;用于聚合其它微服务模块 创建父项目, 作为聚合其它微服务模块 项目设置​编辑 ​编辑 删除src, 保留一个纯净环境​编辑 1. 配置父工程pom.xml, 作为聚合其它模块 2、修改e-commerce-center\pom.xml,删除不需要的配置节…

Java.lang.NoClassDefFoundError: org/apache/logging/log4j/util/ReflectionUtil

具体问题描述如下&#xff1a; SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/maven/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.6.2/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SL…

【Spring - beans】 BeanDefinition 源码

目录 1. BeanDefinition 1.1 AbstractBeanDefinition 1.2 RootBeanDefinition 1.3 ChildBeanDefinition 1.4 GenericBeanDefinition 2. BeanDefinitionReader 2.1 AbstractBeanDefinitionReader 2.2 XmlBeanDefinitionReader 2.3 GroovyBeanDefinitionReader 2.4 Pro…

(跨模态)AI作画——使用stable-diffusion生成图片

AI作画——使用stable-diffusion生成图片 0. 简介1. 注册并登录huggingface2. 下载模型3. 生成 0. 简介 自从DallE问世以来&#xff0c;AI绘画越来越收到关注&#xff0c;从最初只能画出某些特征&#xff0c;到越来越逼近真实图片&#xff0c;并且可以利用prompt来指导生成图片…

软件测试面试题——数据库知识

1、要查询每个商品的入库数量&#xff0c;可以使用以下SQL语句&#xff1a; SELECT 商品编号, SUM(入库数量) AS 入库数量 FROM Stock GROUP BY 商品编号;这将从Stock表中选择每个商品的入库数量&#xff0c;并使用SUM函数对入库数量进行求和。结果将按照商品编号进行分组&…

数据宝藏与精灵法师:探秘Elf擦除魔法的奇幻故事

在数字领域的奇幻王国中&#xff0c;大家视数据为宝藏。作为奇幻王国的国王&#xff0c;在他的宝库中&#xff0c;自然是有着无数的数据宝藏。这么多的数据宝藏&#xff0c;却让国王发难了。因为宝库有限&#xff0c;放不下这么多数据宝藏。因此&#xff0c;国王广招天下的精灵…

【备战秋招】每日一题:3月18日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

简易someip服务发现SD报文演示

环境 $ cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.1 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION"22.04.1 LTS (Jammy Jellyfish)" VERSION_CODENAMEjammy IDubuntu ID_LIKEdebian HOME_URL"https://www.ubuntu.com/"…

chatgpt赋能Python-pythonsum

Pythonsum&#xff1a;优秀的Python算法包介绍 Pythonsum是Python语言的一个优秀的算法包&#xff0c;具有很高的可重用性和性能&#xff0c;支持大规模数据处理和复杂算法实现。本文将为大家介绍Pythonsum的基本功能和优势。 Pythonsum的基本功能 Pythonsum提供了一系列丰富…

华为OD机试真题 Java 实现【对称字符串】【2023Q2 200分】

一、题目描述 对称就是最大的美学&#xff0c;现有一道关于对称字符串的美学。 已知&#xff1a; 第 1 个字符串&#xff1a;R 第 2 个字符串&#xff1a;BR 第 3 个字符串&#xff1a;RBBR 第 4 个字符串&#xff1a;BRRBRBBR 第 5 个字符串&#xff1a;RBBRBRRBBRRBRBBR …

扑克牌大小OJ题

题目链接 扑克牌大小_牛客题霸_牛客网 题目完整代码 #include <iostream> #include<string> #include<algorithm> using namespace std;// left_str 左边牌 // right_str 右边牌// left_count 左边牌数 // right_count 右边牌数// left_first 左边第一个牌…

chatgpt赋能Python-pythonsep怎么用

Python在SEO中的应用 Python一直是广受欢迎的编程语言之一&#xff0c;它拥有强大的功能和易于使用的特性&#xff0c;使得它成为了许多开发人员们的首选。“Pythonsep”是Python在SEO中的应用&#xff0c;它可以帮助用户更好地优化自己的网站&#xff0c;让网站更容易被用户发…

搭建python web环境----Django

第一步&#xff1a;安装Django 1.进入cmd&#xff1a;pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple 2.检测版本&#xff1a; 第二步&#xff1a;配置环境变量 1.查找python安装位置: 2.打开django文件夹中bin文件夹&#xff1a; 查看django的安装位置&am…

火爆CV圈的SAM是什么?

SAM是什么 前言 最近几周&#xff0c;人工智能的圈子里都在讨论SAM&#xff08;Segment Anything Model&#xff09;&#xff0c;一个号称&#xff08;零样本&#xff09;分割一切的图像分割模型。 图&#xff1a;Segment Anything Demo 2023年4月6号&#xff0c;Meta AI发布…

npm install(报错)

1、npm install 报错&#xff08;如图&#xff09; WARN ERESOLVE overriding peer dependency npm WARN While resolving: intervolga/optimize-cssnano-plugin1.0.6 npm WARN Found: webpack3.12.0 npm WARN node_modules/webpack npm WARN peer webpack"^2.0.0 || ^3…

spring源码学习

1.xmlBeanFactory对defaultListableBeanFactory类进行扩展&#xff0c;主要用于从XML文档中获取BeanDefinition&#xff0c;对于注册及获取bean都是使用从父类DefaultListableBeanFactory继承的方法去实现。 xmlBeanFactory 主要是使用reader属性对资源文件进行读取和注册。 2.…

VMware ESXi 6.7 U3 Final - ESXi 6 系列最终版下载

VMware ESXi 6.7 U3 Final - ESXi 6 系列最终版下载 VMware ESXi 6 Standard 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VersionRelease NameRelease …

APIO2023 游记

GDOI 和 GDKOI 的游记都咕咕咕了&#xff0c;而且都炸了&#xff0c;APIO 的游记提前发&#xff0c;就是要破釜沉舟。 我是线上选手。 Day -7 我们原题检测&#xff0c;阿克了&#xff0c;毕竟是原题&#xff0c;虽然有两道博弈论黑题确实挺毒瘤的。 教练让我做 APIO2012 的…