实验三 面向对象(二)(实验报告)

姓名: XXX          班级: XXX          学号: XXX

一、实验目的

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

二、实验目标

  1. 能够运用Java语言来实现类的继承及多态性、熟练使用包来扩展程序功能并能建立自己的包;
  2. 能够灵活运用Java语言的抽象方法、接口、抽象类来编写应用程序解决实际问题。

三、实验内容

3.1 实验环境

IntelliJ IDEA Ultimate Edition 2021.3 x64. + openjdk-17.0.1.

3.2 具体实验内容

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

问题分析:定义抽象类用abstract关键字, 其他普通类继承该类即可,注意,抽象类被继承后,需要实现抽象类中的抽象方法

public class QuestionOne {public static void main(String[] args) {Shape shape1 = new Round(5);Shape shape2 = new Rectangle(2, 6);Shape shape3 = new EquilateralTriangle(3);shape1.describe();shape2.describe();shape3.describe();}
}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);}
}
  • 实验结果

这是一个半径为5.0的圆, 面积为78.53981633974483, 周长为31.41592653589793
这是一个长为2.0,宽为6.0的矩形, 面积为12.0, 周长为16.0
这是一个变长为3.0的等边三角形, 面积为31.17691453623979, 周长为9.0

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

问题分析:定义接口用interface关键字,实现接口使用implements关键字

public class QuestionTwo {public static void main(String[] args) {Teacher teacher = new Teacher("王老师");Student student = new Student("张三");teacher.talk();student.talk();teacher.homework();student.homework();}
}interface Lecture {public abstract void talk ();public abstract void homework ();
}class Student implements Lecture {private final String name;@Overridepublic void talk() {System.out.println(this.name + "回答问题");}public Student(String name) {this.name = name;}@Overridepublic void homework() {System.out.println(this.name + "做作业");}
}class Teacher implements Lecture {private final String name;@Overridepublic void talk() {System.out.println(this.name + "提出一个问题");}public Teacher(String name) {this.name = name;}@Overridepublic void homework() {System.out.println(this.name + "布置了作业");}
}
  • 实验结果

王老师提出一个问题
张三回答问题
王老师布置了作业
张三做作业

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

问题分析:定义接口用interface关键字,实现接口的类重写其中的抽象函数

public class QuestionThree {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());}
}interface Countable {public abstract int sum ();public abstract int count ();
}// 偶数
class Even implements Countable {@Overridepublic int sum() {int sum = 0;for (int i = 0; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}return sum;}@Overridepublic int count() {int count = 0;for (int i = 0; i <= 100; i++) {if (i % 2 == 0)count++;}return count;}
}// 奇数
class Odd implements Countable {@Overridepublic int sum() {int sum = 0;for (int i = 0; i <= 100; i++) {if (i % 2 != 0) {sum += i;}}return sum;}@Overridepublic int count() {int count = 0;for (int i = 0; i <= 100; i++) {if (i % 2 != 0)count++;}return count;}
}
  • 实验结果

100以内的偶数有51个
100以内的偶数和为:2550
100以内的奇数有50个
100以内的奇数和为:2500

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

问题分析:定义接口用interface关键字,实现接口使用implements关键字,继承类使用extends关键字,注意,接口可以多实现,类不能多继承

public class QuestionFour {public static void main(String[] args) {Cat cat = new Cat();cat.breathe();cat.eat();cat.sleep();cat.speak();cat.think();cat.walk();People people = new People();people.breathe();people.eat();people.sleep();people.speak();people.think();people.walk();people.swim();Bird bird = new Bird();bird.breathe();bird.eat();bird.sleep();bird.speak();bird.think();bird.walk();bird.fly();bird.swim();Fish fish = new Fish();fish.breathe();fish.eat();fish.sleep();fish.speak();fish.think();fish.swim();}
}abstract class Animal {public abstract void breathe ();
}class Cat extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, Walkable {@Overridepublic void breathe() {System.out.println("猫呼吸");}@Overridepublic void eat() {System.out.println("猫吃饭");}@Overridepublic void sleep() {System.out.println("猫睡觉");}@Overridepublic void think() {System.out.println("猫思考");}@Overridepublic void speak() {System.out.println("喵喵喵");}@Overridepublic void walk() {System.out.println("猫走路");}
}class People extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, Walkable, AbleToSwim {@Overridepublic void breathe() {System.out.println("人呼吸");}@Overridepublic void eat() {System.out.println("人吃饭");}@Overridepublic void sleep() {System.out.println("人睡觉");}@Overridepublic void think() {System.out.println("人思考");}@Overridepublic void speak() {System.out.println("人说话");}@Overridepublic void walk() {System.out.println("人走路");}@Overridepublic void swim() {System.out.println("人游泳");}
}class Bird extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, Walkable, AbleToSwim, Flyable {@Overridepublic void breathe() {System.out.println("鸟呼吸");}@Overridepublic void eat() {System.out.println("鸟吃食");}@Overridepublic void sleep() {System.out.println("鸟睡觉");}@Overridepublic void think() {System.out.println("鸟思考");}@Overridepublic void speak() {System.out.println("叽叽喳喳");}@Overridepublic void walk() {System.out.println("鸟跳");}@Overridepublic void swim() {System.out.println("鸟游泳");}@Overridepublic void fly() {System.out.println("鸟飞翔");}
}class Fish extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, AbleToSwim {@Overridepublic void breathe() {System.out.println("鱼呼吸");}@Overridepublic void eat() {System.out.println("鱼吃食");}@Overridepublic void sleep() {System.out.println("鱼睡觉");}@Overridepublic void think() {System.out.println("鱼思考");}@Overridepublic void speak() {System.out.println("啵啵啵");}@Overridepublic void swim() {System.out.println("鱼游动");}
}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 ();
}
  • 实验结果

猫呼吸
猫吃饭
猫睡觉
喵喵喵
猫思考
猫走路
人呼吸
人吃饭
人睡觉
人说话
人思考
人走路
人游泳
鸟呼吸
鸟吃食
鸟睡觉
叽叽喳喳
鸟思考
鸟跳
鸟飞翔
鸟游泳
鱼呼吸
鱼吃食
鱼睡觉
啵啵啵
鱼思考
鱼游动

四、实验总结

  学习和使用了java抽象类和接口,掌握了定义抽象类和接口中类属性、类方法,可以理解面向对象编程,会使用面向对象编程的方法解决问题,明白java中没有多继承,多继承是通过多接口实现。
  抽象类中的抽象方法是public abstract的
接口中的方法是public abstract的,属性是public final的

java实验三正式报告相关推荐

  1. java实验一正式报告

    实验一 java基础编程(实验报告) 姓名: XXX          班级: XXX          学号: XXX 一.实验目的   在集成开发环境下,依照Java语言的基本语法编译和执行简单J ...

  2. java实验三_java实验三实验报告.docx

    java实验三实验报告.docx 实验报告课程名称面向对象课程设计实验项目名称类的继承班级与班级代码13计算机科学与技术1班实验室名称(或课室)SS1205专业计算机科学与技术任课教师尹华学号1225 ...

  3. 云南大学软件学院java实验九_云南大学软件学院JAVA实验三

    云南大学软件学院 实验报告 姓名:王增伟学号:20111120083 班级:软件工程日期:2014.10.2成绩: JAVA实验三 一.实验目的: 熟悉JAVA的控制流程,循环控制,数组结构,以及Bi ...

  4. java实验三_JAVA实验三及总结

    JAVA第五周作业 Java实验报告三 第一题 1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码.结果截图.) (1).统计该字符 ...

  5. 常州工学院Java实验三

    实验三 类和对象 实验目的 理解Java程序设计是如何体现面向对象编程的基本思想: 了解类的封装方法以及如何创建类和对象: 了解成员变量和成员方法的特性,掌握OOP方式进行程序设计的方法: 实验要求 ...

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

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

  7. 头歌实验平台Java实验三

    实验三 (Java)面向对象编程 关卡1 编写一个计算各种形状的面积和周长的程序 任务描述 本关任务:编写一个计算各种形状的面积和周长的程序. 要求 父类Shape2D为一个抽象类,其中包含计算周长和 ...

  8. 2017-2018-1 20155332实验三 实时系统报告

    20155332 实验三 任务一: 1.学习使用Linux命令wc(1)2.基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端3.客户端传一个文本文件给服务器4 ...

  9. java实验三20135104

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计                         班级:1351            姓名:刘帅      ...

最新文章

  1. ecm工作原理 usb_(转)USB中CDC-ECM的了解和配置
  2. 第十篇学会编写python代码_Python之路,第十篇:Python入门与基础10
  3. Android JNI 和 NDK
  4. Java IO 之 SequenceInputStream 原理解析
  5. 解决Could not reserve enough space for object heap
  6. 前端学习(2993):vue+element今日头条管理--加入git管理
  7. matlab求RMSECV,CARS 用于matlab模式识别(分类和回归)的特征变量提取方法 联合开发网 - pudn.com...
  8. 服务器系统崩溃文件系统损坏,explorer启动崩溃,提示文件系统错误-2147219200
  9. php709,深度爆料评测bt2020与bt709有什么区别?哪个好?良心点评实际情况
  10. 数值积分方法的总结(从简单梯形积分到龙贝格积分、自适应积分、高斯积分等)
  11. 腾讯地图计算两点间距离
  12. 综述类论文怎么写引言和结语?
  13. web平台微信扫码登录
  14. [搬运]MATLAB newff函数训练模式
  15. 漫漫长路——微信十年历程
  16. 寒冬中,这些行业正在爆发
  17. ARP病毒的分析与防治
  18. 第十七届全国大学生智能车竞赛山东赛区比赛成绩
  19. 微信小程序精品demo:面包旅行:界面设计,文本展示,
  20. 7-80 大炮打蚊子(C语言)

热门文章

  1. StaMPS结合TRIAN 做GACOS大气校正
  2. vin码识别已经诞生,还在傻乎乎手工录入吗?
  3. 图解技术原理,真的太赞了!
  4. 计算机蜂鸣无法开机,计算机开机后会时常出现3声蜂鸣是什么原因
  5. 大数据面试常见问题(三)——Hadoop部分
  6. selenium3 设置浏览器安装的位置
  7. Android组件化跨进程通信框架Andromeda解析
  8. Injective Protocol官方文档翻译(九) -清盘、清算(Liquidation)
  9. Windows Server 2008 使用“net use”挂载网络共享时“发生系统错误53”的解决方案
  10. 排序算法(三)—— 插入法排序算法