Java面向对象程序设计实验报告(实验四 抽象类的练习)

news2024/11/27 16:29:06

作者:命运之光 
专栏:Java面向对象程序设计实验报告

目录

✨一、需求设计

✨二、概要设计

✨三、详细设计

✨四、调试结果

✨五、测试结果

✨附录:源程序代码(带注释)

demo4类

Car类

Circle类

Shape类

Triangle类

Truck类

Vehicle类 


实验四 抽象类的练习

实验环境:Eclipse+JDK

实验目的:

  1. 掌握并理解面向对象的编程思想;
  2. 熟练掌握类和对象的定义及使用;
  3. 掌握抽象类的概念,特点及其使用。

实验内容:

1、编写一个程序,设计一个汽车抽象类Vehicle,包含的属性有车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。

(1)每个类都有构造方法进行属性初始化;

(2)抽象类Vehicle类具有输出相关数据信息的抽象方法;

(3)Car,Truck子类覆写抽象类的抽象方法,并给子类分别添加一个子类特有的方法(内容自定);

(4)使用Test类中的main方法实例化Car,Truck,并输出相关信息(分别练习向上转型和向下转型)。

2、定义Shape抽象类,包含私有属性color,创建构造器为color赋值;包含计算周长的方法celPerimeter();定义子类Triangle,包含三边;定义子类Circle,包含半径radius;子类分别实现父类的计算周长功能。


以下是实验报告内容

✨✨前言:由于五一假期导致最后一节Java上机实验课没有上,所以不是很清楚实验报告的具体要求,我就按照之前数据结构实验报告的格式写了这次的Java上级报告,有需要的还是直接复制粘贴就行了,不过这次我写的比较敷衍,自己要上交实验报告的话,最好还是稍微修改美化一下🦄。

✨一、需求设计

编写一个程序,设计一个汽车抽象类Vehicle,包含的属性有车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。

(1)每个类都有构造方法进行属性初始化;

(2)抽象类Vehicle类具有输出相关数据信息的抽象方法;

(3)Car,Truck子类覆写抽象类的抽象方法,并给子类分别添加一个子类特有的方法(内容自定);

(4)使用Test类中的main方法实例化Car,Truck,并输出相关信息(分别练习向上转型和向下转型)。

定义Shape抽象类,包含私有属性color,创建构造器为color赋值;包含计算周长的方法celPerimeter();定义子类Triangle,包含三边;定义子类Circle,包含半径radius;子类分别实现父类的计算周长功能。

✨二、概要设计

本实验设计了七个类,一个测试类demo4,一个汽车抽象类Vehicle,包含的属性有车轮个数wheels和车重weight,一个小车类Car是Vehicle的子类,其中包含的属性有载人数loader,一个卡车类Truck是Car类的子类,其中包含的属性有载重量payload。一个Shape抽象类包含私有属性color,创建构造器为color赋值;包含计算周长的方法celPerimeter();定义子类Triangle,包含三边;定义子类Circle,包含半径radius;子类分别实现父类的计算周长功能。

三、详细设计

新建一个class类类名为Vehicle,包含的属性有车轮个数wheels和车重weight。

public int wheels;//车轮个数
public double weight;//车重

写入空参和全参方法

Vehicle(){}//空参构造
Vehicle(int wheels,double weight)//全参构造
{
    this.wheels=wheels;
    this.weight=weight;
}

最后定义输出相关信息

public abstract String put();//输出相关信息

新建一个class类类名为Car是Vehicle的子类,其中包含的属性有载人数loader

public int loader;

构造Car类的无参有参两参构造。

Car(){}
Car(int loader,int wheels,double weight)
{
    super(wheels,weight);
    this.loader=loader;
}

重写put方法

public String put()
{
    System.out.println("小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人");
    return "小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人";
}

定义汽车的特有方法

public void cardemo()
{
    System.out.println("汽车的特有方法");
}

新建一个class类Truck是Car类的子类,其中包含的属性有载重量payload

public double payload;

写入空参和全参方法

Truck(){}
Truck(double payload)
{
    super();
    this.payload=payload;
}
Truck(double payload,int wheels,double weight)
{
    super(wheels,weight);
    this.payload=payload;
}

重写put方法

public String put()
{
    System.out.println("卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克");
    return "卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克";
}

新建一个class类Shape抽象类包含私有属性color,创建构造器为color赋值;

private String color;

无参有参构造

Shape(){}
Shape(String color)
{
    this.color=color;
}

setter,getter重写为color赋值。

public String setColor(String color)
{
    this.color=color;
    return this.color;
}
public String getColor()
{
    return this.color;
}

计算周长的方法。

public abstract double celPerimeter();

创建一个class类类名为Triangle是Shape的子类,三边为私有属性。

private double a;
private double b;
private double c;

无参有参构造

Circle(){}
Circle(double radius,String color)
{
    super(color);
    this.radius=radius;
}

重写celPerimeter方法

public double celPerimeter()
{
    return 2*radius*3.14;
}

创建一个class类类名为Circle是Shape的子类,私有属性为半径。

private double radius;

无参有参构造

Circle(){}
Circle(double radius,String color)
{
    super(color);
    this.radius=radius;
}

重写celPerimeter方法

public double celPerimeter()
{
    return 2*radius*3.14;
}

四、调试结果

输入第一题的测试样例为:

小车车轮数为:3;小车车重为:4.0载人数为:800人

卡车车轮数为:6;卡车车重为:1500.0卡车载重为:2000.0千克

汽车的特有方法

小车车轮数为:3;小车车重为:4.0载人数为:1000人

测试结果如图所示:

输入第二题的测试样例为:

三角形三边为6,7,8颜色为红色,圆形的半径为3颜色为蓝色。

测试结果如图所示:

  

五、测试结果

依照实验要求输入第一题样例为:

小车车轮数为:4;小车车重为:5.0载人数为:1000人

卡车车轮数为:8;卡车车重为:2000.0卡车载重为:2500.0千克

汽车的特有方法

小车车轮数为:4;小车车重为:5.0载人数为:1000人

测试结果如图所示:

依照实验要求输入第二题样例,三角形三边为3,4,5颜色为红色,圆形的半径为4颜色为蓝色。

测试结果如图所示:

附录:源程序代码(带注释)

demo4类

package 命运之光;
public class demo4 {
    public static void main(String[] args)
    {
        System.out.println("----------第一题-------------");
        Car c=new Car(1000,4,5);
        Vehicle v =new Car(1000,4,5);//向上转型
        Vehicle v11 =new Truck(2500,8,2000);
        Truck t=new Truck(2500,8,2000);
        c.put();
        t.put();
        Car v1 =(Car) v ;//向下转型
        v1.cardemo();
        v.put();
        System.out.println("----------第二题-------------");
        Triangle T=new Triangle(3,4,5,"红色");
        Circle C=new Circle(4,"蓝色");
        System.out.println("三角形周长为:"+T.celPerimeter()+"颜色为:"+T.getColor());
        System.out.println("圆形周长为:"+C.celPerimeter()+"颜色为:"+C.getColor());
    }
}

Car类

package 命运之光;
public class Car extends Vehicle {
    public int loader;
    Car(){}
    Car(int loader)
    {
        super();
        this.loader=loader;
    }
    Car(int loader,int wheels,double weight)
    {
        super(wheels,weight);
        this.loader=loader;
    }
    public String put()
    {
        System.out.println("小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人");
        return "小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人";
    }
    public void cardemo()
    {
        System.out.println("汽车的特有方法");
    }
}

Circle类

package 命运之光;
public class Circle extends Shape{
    private double radius;
    Circle(){}
    Circle(double radius,String color)
    {
        super(color);
        this.radius=radius;
    }
    public double celPerimeter()
    {
        return 2*radius*3.14;
    }
}

Shape类

package 命运之光;
public abstract class Shape {
    private String color;
    Shape(){}
    Shape(String color)
    {
        this.color=color;
    }
    public String setColor(String color)
    {
        this.color=color;
        return this.color;
    }
    public String getColor()
    {
        return this.color;
    }
    public abstract double celPerimeter();
}

Triangle类

package 命运之光;
public class Triangle extends Shape{
    private double a;
    private double b;
    private double c;
    Triangle(){}
    Triangle(double a,double b,double c,String color)
    {
        super(color);
        this.a=a;
        this.b=b;
        this.c=c;
    }
    public double celPerimeter()
    {
        return a+b+c;
    }
}

Truck类

package 命运之光;
public class Truck extends Vehicle {
    public double payload;
    Truck(){}
    Truck(double payload)
    {
        super();
        this.payload=payload;
    }
    Truck(double payload,int wheels,double weight)
    {
        super(wheels,weight);
        this.payload=payload;
    }
    public String put()
    {
        System.out.println("卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克");
        return "卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克";
    }
}

Vehicle类

package 命运之光;
public abstract class Vehicle {
    public int wheels;//车轮个数
    public double weight;//车重
    Vehicle(){}//空参构造
    Vehicle(int wheels,double weight)//全参构造
    {
        this.wheels=wheels;
        this.weight=weight;
    }
    public abstract String put();//输出相关信息
}

 

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

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

相关文章

谷歌chrome浏览器无法自动播放video标签视频的问题

问题根源详见:Chrome中的自动播放政策>> https://developer.chrome.com/blog/autoplay/ The Autoplay Policy launched in Chrome 66 for audio and video elements and is effectively blocking roughly half of unwanted media autoplays in Chrome. For t…

基于数组实现的顺序表(SeqList)

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 它的详细定义如下: 顺序表是一种数据结构,用于存储一组具有相同数据类型的元素,并按照元素在内存中的…

数据库【库,表操作】

目录 简单了解1.连接数据库服务器2.创建数据库3.创建表4.使用数据库5.数据库框架6.SQL的分类7.存储引擎 库操作1.创建数据库2.查看系统默认字符集以及校验规则3.查看数据库支持的字符集和校验规则4.查看数据库5.显示数据库语句6.删除数据库7.修改数据库8.备份和恢复9.查看连接情…

20 SQL——多表查询 (消除无效笛卡尔积)

create table dept(id int primary key auto_increment,name varchar(15))comment 部门;insert into dept(id, name) values (1,研发部),(2,市场部),(3,财务部),(4,销售部),(5,总经办),(6,人事部);create table staff (id int primary key auto_increment commentID,name …

【面试篇】Redis持久化面试题

文章目录 Redis持久化🙎‍♂️面试官:什么是Redis持久化? AOF日志AOF日志原理🙎‍♂️面试官:AOF日志是怎么工作的/AOF写入磁盘的流程?🙎‍♂️面试官: 刚刚说到了Redis先执行写入的…

Discourse Math 插件

概述Discourse Math 使用 MathJax (默认) 或者 KaTeX 来让你在你的 Discourse 中使用数学公式。 仓库链接GitHub - discourse/discourse-math: Official MathJax support for Discourse Install Guide如何在 Discourse 中安装插件 这个插件是 Discourse 官方提供的插件&#x…

javascript基础一:Javscript数组的常用方法有哪些?

在日常开发中,我们对数组可以说操作最多,这里我们来整理下数组的一下最常用的方法 数组基本操作可以归纳为 增、删、改、查,需要留意的是哪些方法会对原数组产生影响,哪些方法不会 下面对数组常用的操作方法做一个归纳 一、基本…

ChatGPT国内免费使用的方法有哪些?

目录 一、ChatGpt是什么? 二、ChatGPT国内免费使用的方法: 第一点:电脑端 第二点:手机端 三、结语: 一、ChatGpt是什么? ChatGPt是美国OpenAI [1] 研发的聊天机器人程序 。更是人工智能技术驱动的自然语…

【C++数据结构】二叉搜索树的使用和模拟实现及其应用--K模型和KV模型

文章目录 一、二叉搜索树的概念二、二叉搜索树的操作及其实现(非递归)1.二叉搜索树节点和类的定义2.二叉搜索树的构造函数3.二叉搜索树的拷贝构造4.二叉树搜索树的赋值重载5.二叉搜索树的析构函数6.二叉搜索树的中序遍历7.二叉搜索树的查找8.二叉搜索树的插入9.二叉搜索树的删除…

瑞吉外卖 - 分页查询分类功能(12)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

【Android 面经分享】阿里技术专家的 5年 Android 开发的求职之路

作者:yechaoa 来源:https://juejin.cn/post/6996551155220217869 前言 前段时间在看机会,本文就是我对求职过程的一个总结。 同时,也作为一个面试官,来说说求职中需要注意的点。 各大厂的面试会考核哪些知识点5年开发应该具备哪些技术要点…

chatgpt赋能Python-pycharm取消venv

PyCharm取消venv:一种更简便的虚拟环境管理方式 虚拟环境是Python开发中的重要组成部分之一。它可以让您在同一台机器上使用不同的Python版本、不同的库以及不同的项目而不会干扰彼此之间的功能独立性。而在Python开发中,venv是创建虚拟环境的常用方式之…

chatgpt赋能Python-pycharm怎么关联

Pycharm怎么关联——提高Python开发效率的关键步骤 作为一名有10年Python编程经验的工程师,我深知在日常开发中如何提高Python的编程效率至关重要。而Pycharm则是Python领域最常用的IDE之一,其强大的代码编辑和调试功能,深受开发者的喜爱。 …

Linux驱动开发 --- CCF时钟框架

0. CCF时钟框架概览 linux内核的CCF时钟框架可以分为三层,每一层的职责以及彼此的关系如下图所示 对CCF框架的分析也将以如下几个方向入手: consumer(也就是device driver)如何使用CCFprovider如何借助CCF管理系统的时钟资源CC…

前端BFC

一、首先我们要先了解常见的定位方案,总共3种(普通流、浮动、绝对定位) 而BFC是属于普通流的 我们可以把BFC看作为页面的一块渲染区域,他有着自己的渲染规则 简单来说BFC可以看作元素的一种属性,当元素拥有了BFC属性…

ChatGPT:2. 使用OpenAI创建自己的AI网站:1. 初探API

使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白,有OpenAI的账号,但想调用OpenAI的API搞一些有意思的事,那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。博主只能利用下班时间更新,进度慢…

自学spring个人笔记

目录 如何学习spring? 如何查看自己电脑是否安装了spring boot Spring Boot CLI安装成功 springboot的版本2.7.12(SNAPSHOT)与2.7.11有什么区别? 报错解决 Plugin org.springframework.boot:spring-boot-maven-plugin:not found 在maven pom.xml中…

【AFNetWorking源码(二)AFURLSessionManger和AFHTTPSessionManager】

前言 学习了Mananger的初始化和以GET请求为例的过程,发现整个过程离不开AFHTTPSessionManager和AFURLSessionManger的某些方法。这两个是AFN的重要的网络通信模块内容,对它们作揖详细的学习。 AFURLSessionManager和AFHTTPSessionManager都是AFNetwork…

chatgpt赋能Python-mac电脑安装python

在Mac电脑上轻松安装Python Python是一种高级编程语言,常用于数据科学、机器学习和Web开发等领域。如果你是一名Mac电脑用户,那么安装Python将会让你受益匪浅。本文将提供详细的操作步骤,让你轻松安装Python并开始学习编程。 第一步&#x…

【Linux】进程地址空间(带你认清内存的本质)

🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️博客专栏:✈️Linux之路       🛰️社区 :✈️ 进步学堂       &a…