java实验三正式报告
2021/11/28 17:13:28
本文主要是介绍java实验三正式报告,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
实验三 面向对象(二)(实验报告)
一、实验目的
在集成开发环境下,实现类的继承及多态,实现抽象类、接口的定义,根据实际问题,运用抽象方法、接口及抽象类进行程序开发。
二、实验目标
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; } @Override public double calculatePerimeter() { return Math.PI * this.R * 2; } @Override public void describe() { System.out.println("这是一个半径为" + this.R + "的圆, 面积为" + calculateSquare() + ", 周长为" + calculatePerimeter()); } @Override public 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; } @Override public double calculatePerimeter() { return this.a * 2 + this.b * 2; } @Override public void describe() { System.out.println("这是一个长为" + this.a + ",宽为" + this.b + "的矩形, 面积为" + calculateSquare() + ", 周长为" + calculatePerimeter()); } @Override public double calculateSquare() { return this.a * this.b; } } class EquilateralTriangle extends Shape { private final double a; public EquilateralTriangle(double a) { this.a = a; } @Override public double calculatePerimeter() { return this.a * 3; } @Override public void describe() { System.out.println("这是一个变长为" + this.a + "的等边三角形, 面积为" + calculateSquare() + ", 周长为" + calculatePerimeter()); } @Override public 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; @Override public void talk() { System.out.println(this.name + "回答问题"); } public Student(String name) { this.name = name; } @Override public void homework() { System.out.println(this.name + "做作业"); } } class Teacher implements Lecture { private final String name; @Override public void talk() { System.out.println(this.name + "提出一个问题"); } public Teacher(String name) { this.name = name; } @Override public 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 { @Override public int sum() { int sum = 0; for (int i = 0; i <= 100; i++) { if (i % 2 == 0) { sum += i; } } return sum; } @Override public int count() { int count = 0; for (int i = 0; i <= 100; i++) { if (i % 2 == 0) count++; } return count; } } // 奇数 class Odd implements Countable { @Override public int sum() { int sum = 0; for (int i = 0; i <= 100; i++) { if (i % 2 != 0) { sum += i; } } return sum; } @Override public 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 { @Override public void breathe() { System.out.println("猫呼吸"); } @Override public void eat() { System.out.println("猫吃饭"); } @Override public void sleep() { System.out.println("猫睡觉"); } @Override public void think() { System.out.println("猫思考"); } @Override public void speak() { System.out.println("喵喵喵"); } @Override public void walk() { System.out.println("猫走路"); } } class People extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, Walkable, AbleToSwim { @Override public void breathe() { System.out.println("人呼吸"); } @Override public void eat() { System.out.println("人吃饭"); } @Override public void sleep() { System.out.println("人睡觉"); } @Override public void think() { System.out.println("人思考"); } @Override public void speak() { System.out.println("人说话"); } @Override public void walk() { System.out.println("人走路"); } @Override public void swim() { System.out.println("人游泳"); } } class Bird extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, Walkable, AbleToSwim, Flyable { @Override public void breathe() { System.out.println("鸟呼吸"); } @Override public void eat() { System.out.println("鸟吃食"); } @Override public void sleep() { System.out.println("鸟睡觉"); } @Override public void think() { System.out.println("鸟思考"); } @Override public void speak() { System.out.println("叽叽喳喳"); } @Override public void walk() { System.out.println("鸟跳"); } @Override public void swim() { System.out.println("鸟游泳"); } @Override public void fly() { System.out.println("鸟飞翔"); } } class Fish extends Animal implements AbleToEat, AbleToSleep, Thinkable, Speakable, AbleToSwim { @Override public void breathe() { System.out.println("鱼呼吸"); } @Override public void eat() { System.out.println("鱼吃食"); } @Override public void sleep() { System.out.println("鱼睡觉"); } @Override public void think() { System.out.println("鱼思考"); } @Override public void speak() { System.out.println("啵啵啵"); } @Override public 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实验三正式报告的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16ShardingSphere 如何完美驾驭分布式事务与 XA 协议?
- 2024-11-16ShardingSphere如何轻松驾驭Seata柔性分布式事务?
- 2024-11-16Maven资料入门指南
- 2024-11-16Maven资料入门教程
- 2024-11-16MyBatis Plus资料:新手入门教程与实践指南
- 2024-11-16MyBatis-Plus资料入门教程:快速上手指南
- 2024-11-16Mybatis资料入门教程:新手必看指南
- 2024-11-16MyBatis资料详解:新手入门与初级实战指南
- 2024-11-16MyBatisPlus资料:初学者入门指南与实用教程
- 2024-11-16MybatisPlus资料详解:初学者入门指南