实验三 面向对象(二)

<center>
<strong>姓名:</strong>
<u>XXX</u>
&emsp;&emsp;
<strong>班级:</strong>
<u>XXXXX</u>
&emsp;&emsp;
<strong>学号:</strong>
<u>XXXXXXXXXXXX</u></center>

一、实验目的

  在集成开发环境下,实现类的继承及多态,实现抽象类、接口的定义,根据实际问题,运用抽象方法、接口及抽象类进行程序开发。

二、实验目标

  (1)能够运用Java语言来实现类的继承及多态性、熟练使用包来扩展程序功能并能建立自己的包;

  (2)能够灵活运用Java语言的抽象方法、接口、抽象类来编写应用程序解决实际问题。

三、实验内容

3.1 实验环境

IntelliJ IDEA Community Edition 2021.1 x64 + openjdk-16.0.1

3.2 实验内容

  1. 设计一个抽象类图形类,在该类中包含有至少三个抽象方法,分别用于求周长、求面积,以及对图形进行描述(如,“这是**形状,周长是**,面积是**”),分别定义圆形类、长方形类、等边三角形类来继承图形类,实现上述三个方法,并创建实例验证。

  2. 定义一个抽象接口Lecture,接口中至少有两个抽象方法talk()homework(),分别定义Student类与Teacher类实现Lecture接口,Student类的talk()方法用于模拟学生回答问题,Teacher类的talk()方法用于模拟老师提出问题,Student类的homework ()方法用于模拟学生写作业,Teacher类的homework ()方法用于模拟老师布置作业。

  3. 定义一个抽象接口,该接口用于求和与统计数量。定义两个奇数类与偶数类实现上述接口,分别可以求100以内的奇数的和,统计100以内的奇数个数,以及求100以内的偶数的和,统计100以内的偶数个数。

  4. 定义一个抽象类动物类,同时定义抽象接口:进食接口、睡觉接口、思考接口、说话接口、行走接口、游泳接口、飞翔的接口。分别定义猫类、人类、鸟类、鱼类继承动物类,同时,根据实际情况,选择性实现上述接口,并创建实例验证。

四、实验过程分析

4.1 实验步骤

  • 设计一个抽象类图形类,在该类中包含有至少三个抽象方法,分别用于求周长、求面积,以及对图形进行描述(如,“这是**形状,周长是**,面积是**”),分别定义圆形类、长方形类、等边三角形类来继承图形类,实现上述三个方法,并创建实例验证。

实验代码

abstract class Shape {public abstract double calculatePerimeter ();public abstract void describe ();public abstract double calculateSquare ();}class Round extends Shape {private final double R;public Round(double r) {R = r;}@Overridepublic double calculatePerimeter() {return Math.PI * this.R * 2;}@Overridepublic void describe() {System.out.println("这是一个半径为" + this.R + "的圆, 面积为" + calculateSquare() + ", 周长为" + calculatePerimeter());}@Overridepublic double calculateSquare() {return Math.PI * this.R * this.R;}}class Rectangle extends Shape {private final double a;private final double b;public Rectangle(double a, double b) {this.a = a;this.b = b;}@Overridepublic double calculatePerimeter() {return this.a * 2 + this.b * 2;}@Overridepublic void describe() {System.out.println("这是一个长为" + this.a + ",宽为" + this.b + "的矩形, 面积为" + calculateSquare() + ", 周长为" + calculatePerimeter());}@Overridepublic double calculateSquare() {return this.a * this.b;}}class EquilateralTriangle extends Shape {private final double a;public EquilateralTriangle(double a) {this.a = a;}@Overridepublic double calculatePerimeter() {return this.a * 3;}@Overridepublic void describe() {System.out.println("这是一个变长为" + this.a + "的等边三角形, 面积为" + calculateSquare() + ", 周长为" + calculatePerimeter());}@Overridepublic double calculateSquare() {return this.a * this.a * 2 * Math.sqrt(3);}}public class first {public static void main(String[] args) {Shape shape1 = new Round(2);Shape shape2 = new Rectangle(3, 4);Shape shape3 = new EquilateralTriangle(3);shape1.describe();shape2.describe();shape3.describe();}}

结果输出

这是一个半径为2.0的圆, 面积为12.566370614359172, 周长为12.566370614359172
这是一个长为3.0,宽为4.0的矩形, 面积为12.0, 周长为14.0
这是一个变长为3.0的等边三角形, 面积为31.17691453623979, 周长为9.0
  • 定义一个抽象接口Lecture,接口中至少有两个抽象方法talk()homework(),分别定义Student类与Teacher类实现Lecture接口,Student类的talk()方法用于模拟学生回答问题,Teacher类的talk()方法用于模拟老师提出问题,Student类的homework ()方法用于模拟学生写作业,Teacher类的homework ()方法用于模拟老师布置作业。

实验代码

interface Lecture {public abstract void talked ();public abstract void op_homework ();}
class Student implements Lecture {private final String name;@Overridepublic void talked() {System.out.println(this.name + "回答问题");}public Student(String name) {this.name = name;}@Overridepublic void op_homework() {System.out.println(this.name + "做作业"); }}class Teacher implements Lecture {private final String name;@Overridepublic void talked() {System.out.println(this.name + "提出一个问题");}public Teacher(String name) {this.name = name;}@Overridepublic void op_homework() {System.out.println(this.name + "布置了作业");}}public class two {public static void main(String[] args) {Teacher teacher = new Teacher("Smith");Student student = new Student("john");teacher.talked();student.talked();teacher.op_homework();student.op_homework();}}

结果输出

Smith提出一个问题
john回答问题
Smith布置了作业
john做作业
  • 定义一个抽象接口,该接口用于求和与统计数量。定义两个奇数类与偶数类实现上述接口,分别可以求100以内的奇数的和,统计100以内的奇数个数,以及求100以内的偶数的和,统计100以内的偶数个数。

实验代码

interface Countable {public abstract int sum ();public abstract int count ();}
// 偶数
class Even implements Countable {@Overridepublic int sum() {int sum = 0;for (int i = 1; i <= 100; i++)if (i % 2 == 0) sum += i;return sum;}@Overridepublic int count() {int count = 0;for (int i = 1; i <= 100; i++)if (i % 2 == 0) count++;return count;}}// 奇数
class Odd implements Countable {@Overridepublic int sum() {int sum = 0;for (int i = 1; i <= 100; i++)if (i % 2 != 0)sum += i;return sum;}@Overridepublic int count() {int count = 0;for (int i = 1; i <= 100; i++)if (i % 2 != 0)count++;return count;}}public class three {public static void main(String[] args) {Even even = new Even();System.out.println("100以内的偶数个数:" + even.count() + "个");System.out.println("100以内的偶数和:" +  even.sum());Odd odd = new Odd();System.out.println("100以内的奇数个数:" + odd.count() + "个");System.out.println("100以内的奇数和:" +  odd.sum()); }}

结果输出

100以内的偶数个数:50个
100以内的偶数和:2550
100以内的奇数个数:50个
100以内的奇数和:2500
  • 定义一个抽象类动物类,同时定义抽象接口:进食接口、睡觉接口、思考接口、说话接口、行走接口、游泳接口、飞翔的接口。分别定义猫类、人类、鸟类、鱼类继承动物类,同时,根据实际情况,选择性实现上述接口,并创建实例验证。

实验代码

abstract class Animal {public abstract void breathe ();}class Cat extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, Walkable {@Overridepublic void breathe() {System.out.println("Cat is breathe"); }@Overridepublic void eat() {System.out.println("Cat is eating");}@Overridepublic void sleep() {System.out.println("Cat is sleeping");}@Overridepublic void think() {System.out.println("Cat doesn't want to think!");}@Overridepublic void speak() {System.out.println("Cat can't speak");}@Overridepublic void walk() {System.out.println("Walking the cat please!");}}class Fish extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, Walkable {@Overridepublic void breathe() {System.out.println("Fish is breathe"); }@Overridepublic void eat() {System.out.println("Fish is eating,fish die.");}@Overridepublic void sleep() {System.out.println("Fish  slept ,Cat is eating fish");}@Overridepublic void think() {System.out.println("Fish doesn't want to think!");}@Overridepublic void speak() {System.out.println("Fish speak blo blo!");}@Overridepublic void walk() {System.out.println("Fish can't walk!");}}class Humen extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, Walkable {@Overridepublic void breathe() {System.out.println("Man is breathe");}@Overridepublic void eat() {System.out.println("Man is eating");}@Overridepublic void sleep() { System.out.println("Man is sleeping,the fish is ate by Cat");}@Overridepublic void think() {System.out.println("The man stop thinking");}@Overridepublic void speak() {System.out.println("The man :\" shut up!\"");}@Overridepublic void walk() {System.out.println("The man is walking the cat!");}}interface AbleToEat {public abstract void eat ();}
interface AbleToSleep {public abstract void sleep ();}
interface Thinkable {public abstract void think ();}
interface Speakable {public abstract void speak ();}
interface Walkable {public abstract void walk ();}
interface AbleToSwim {public abstract void swim ();}
interface Flyable {public abstract void fly ();}public class four {public static void main(String[] args) {Cat cat = new Cat();Fish fish =new Fish();Humen person= new Humen();cat.breathe();fish.breathe();person.breathe();person.eat();fish.eat();cat.eat();cat.sleep();person.sleep();fish.sleep();person.think();fish.think();cat.think();cat.walk();fish.walk();person.walk();}}

结果输出

Cat is breathe
Fish is breathe
Man is breathe
Man is eating
Fish is eating,fish die.
Cat is eating
Cat is sleeping
Man is sleeping,the fish is ate by Cat
Fish  slept ,Cat is eating fish
The man stop thinking
Fish doesn't want to think!
Cat doesn't want to think!
Walking the cat please!
Fish can't walk!
The man is walking the cat!

4.2 错误分析

问题复现
在第二题的设计运行中遇到如下问题。

经检查是出错位置的函数名talk与定义的抽象方法名talked不一致,未覆盖到lecture中的talked方法.

解决方案
将函数名更改一致。

五、个人总结

  通过本次实验我能够运用Java语言来实现类的继承及多态性,并且能够灵活运用Java语言的抽象方法、接口、抽象类来编写应用程序解决实际问题。在实验中遇到了许多问题,但是在同学的帮助下得到了很好的解决。

实验三 面向对象(二)相关推荐

  1. 实验三 面向对象(二)(预习报告)

    面向对象--Java实验报告 实验三:Java面向对象(二) 实验三 面向对象(二)(预习报告) <center> <strong>姓名:</strong> < ...

  2. Java实验三 面向对象:编写一个类,实现银行账户,并完成程序的测试。

    实验要求: (1)设置的属性有"账号". "储户姓名"."地址"以及"存款余额": (2)设置的方法有"存款& ...

  3. 实验三 面向对象分析与设计

    文章目录 一.实验目的 二.实验内容 实例1:在线选课系统 实例2:试卷自动生成系统 实例3:人事信息管理系统 三.实验步骤 四.实验内容 1.问题陈述 2.用例图(Use Case View)的建模 ...

  4. ArcGIS实验教程——实验三十二:ArcGIS水文分析(流向分析、计算水流长度、汇流分析、河网分析、流域分析)

    ArcGIS实验视频教程合集:<ArcGIS实验教程从入门到精通>(附配套实验数据)> 文章目录 一.流向分析 1. 水流方向计算方法 2. 原始DEM流向分析 3. 洼地判定 4. ...

  5. java实验Java面向对象编程_java 实验三 面向对象程序设计(无脑实验系列)

    实验7 运算符重载 (1)定义日期类,重载 "++"和"--"运算符,使之能处理两个日期类对象自增和自减运算,并且自增和自减又分为前缀和后缀运算.(可继续完善. ...

  6. 图像模块,实验三,二维码读取程序,显示在屏幕上

    步骤 1.运行示例二维码图像,生成二维码,读取二维码 看下效果. 需要读懂程序. 建议看星瞳的视频教程. 2.结合LCD显示二维码信息. 新建一个程序 把LCDtest.py的程序拷贝进行. 然后在里 ...

  7. 实验三 面向对象初步

    1 实验目的 (1)学习如何声明和编写类的代码. (2)学习如何编写改变类的属性的成员函数. (3)学习如何声明和创建对象,如何通过对象调用类的成员函数. 2 实验内容 2.1 设计Point类(40 ...

  8. 【实验三/四 面向对象程序设计/语言基础与面向对象】

    目录 一.实验目的和要求 二.实验内容 1.求最大公约数 2.复数 5.编写一个含有5个类的程序 三.参考 四.其他实验内容 [实验三 面向对象程序设计] 3.编写一个含圆类的程序 4.含圆类.圆柱类 ...

  9. java实验三正式报告

    实验三 面向对象(二)(实验报告) 姓名: XXX          班级: XXX          学号: XXX 一.实验目的   在集成开发环境下,实现类的继承及多态,实现抽象类.接口的定义, ...

最新文章

  1. Javascript获取屏幕与页面尺寸
  2. “逃离大厦”游戏的破解
  3. 【最新合集】编译原理习题(含答案)_4-7语法分析_MOOC慕课 哈工大陈鄞
  4. Android textview字体颜色显示和图片显示
  5. java集合数组,数组小到大排序,数组大到小排序
  6. 基于队列的迷宫求解实现
  7. Linux 下压缩与解压.zip和.rar
  8. Gitlab-API各状态码解释
  9. 读计算机基础知识心得体会1000字,计算机学习个人心得体会1000字.doc
  10. 名字生成器 - 再也不用担心给孩子起名了
  11. Github上找到开源的《植物大战僵尸》代码分享~
  12. 许鹏:从零开始学习,Apache Spark源码走读
  13. spring boot 配置文件
  14. 国内某厂商摄像头敏感信息泄露漏洞事件分析
  15. 传奇 定时任务(泡点、时间触发、任务活动等)
  16. 清华大学计算机系刘斌,queueing刘斌,男,工学博士 ,清华大学计算机科学与技...
  17. DeFCN debug记录(训练过程),以及对cvpods框架的分析
  18. 什么是强化学习?(主要的强化学习概念)
  19. CSR8675模组,支持蓝牙APTX
  20. 【前瞻】Nature:2022年7大“颠覆性”技术

热门文章

  1. bootstrap框架之面包屑导航(Breadcrumbs)
  2. Magnet:即将随 Apache Spark 3.2 发布的高性能外部 Shuffle 服务
  3. 涉密计算机默认安全用户名,机密级涉密计算机的系统登录如采用用户名加口令的方式,则系统口令更换周期不得长于 - 作业在线问答...
  4. 什么?你还不会写JQuery 插件
  5. CrackMe160 学习笔记 之 023
  6. 如何免费将PDF转成JPG?
  7. 老四苏-33:舰载机王 苏-33的另一个编号叫苏-27K。自然,它也是从苏-27改过来的,首飞于1987年8月17日。
  8. saas平台 saas服务 什么是saas
  9. HTML生成PDF、web打印动态分页、预览。内容满了,自动换页、移动端兼容 bookjs-eazy
  10. 转载(中文、日文、韩文编码问题)