实验四 接口与实现
班级: 姓名: 学号:
一、实验目的
1、掌握接口的定义;
2、掌握类怎么实现接口;
3、掌握接口回调技术;
4、掌握面向接口的编程思想;
二、实验内容
1、计算平均分:体操比赛计算选手成绩的办法是去掉一个最高分和最低分后再计算平均分,而学校考查一个班级的某科目的考试情况时是计算全班同学的平均成绩。Gymnastics类和School类都实现了ComputerAverage接口,但实现的方式不同。
设计代码:
运行结果:
2、货车装载量:货车要装载一批货物,货物由电视机、计算机和洗衣机3种商品组成。卡车需要计算整批货物的质量,具体需求如下。
(1)要求有一个ComputerWeight接口,该接口中有一个方法:
public double computerWeight();
(2)要求有3个实现该接口的类,即Television、Computer和WashMachine。这3个通过实现接口ComputerWeight给出自重;
(3)要求有一个Truck类,该类以ComputerWeight接口类型的数组作为成员(Truck面向接口),那么该数组的单元就可以存放Television对象的引用、Computer对象的引用可WashMachine对象的引用。程序能输出Truck对象所装载的货物的总质量。
(4)编写主类,在主类中测试Truck所装载的货物的总质量。
设计代码:
运行结果:
3、小狗在不同环境条件下可能呈现不同的状态表现,要求用接口封装小狗的状态,具体要
求如下:
(1)编写一个接口DogState,该接口有一个名字为void showState()的方法。
(2)编写Dog类,该类中有一个DogState接口声明的变量state。另外,该类有一个show()方法,在该方法中让接口state回调showState()方法。
(3)编写若干个实现DogState接口的类,负责刻画狗的各种状态;比如:在主人面前,听主人的命令;狗遇敌人,狂叫,并冲上去狠咬敌人;遇到朋友,晃动尾巴,热烈欢迎等等,可以发挥自己的想象力;
(4)编写主类,在主类中测试小狗的各种状态。
设计代码:
运行结果:
三、实验总结与分析
1、
package Average;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("请输入体操成绩: (用英文逗号隔开每个成绩)\n");
Gymnastics gymnastics = new Gymnastics();
Scanner s = new Scanner(System.in);
String inputStr = s.nextLine();
String[] strArray = inputStr.split(",");
double[] GymnasticsNum = new double[strArray.length];
for(int i = 0 ; i < GymnasticsNum.length ; i++){
GymnasticsNum[i] = Double.parseDouble(strArray[i]);
}
System.out.println(gymnastics.CalcGradeVal(GymnasticsNum));
System.out.println("请输入全班的成绩: (用英文逗号隔开每个成绩)\n");
School school = new School();
Scanner input = new Scanner(System.in);
String inputSTR = input.nextLine();
String[] strArrayVal = inputSTR.split(",");
double[] schoolNum = new double[strArrayVal.length];
for(int j = 0 ; j < schoolNum.length ; j++){
schoolNum[j] = Double.parseDouble(strArrayVal[j]);
}
System.out.println(school.CalcGradeVal(schoolNum));
}
}
package Average;
public interface ComputerAverage {
double grade = 0;
public double CalcGradeVal(double[] grade);
}
package Average;
public class Gymnastics implements ComputerAverage{
@Override
public double CalcGradeVal(double[] grade) {
int i;
int j;
double temp;
double sum = 0;
//将成绩排序
for(i = 0;i < grade.length - 1;i++)
{
for(j = 0;j < grade.length - i - 1;j++)
{
if(grade[j] < grade[j + 1])
{
temp = grade[j];
grade[j] = grade[j + 1];
grade[j + 1] = temp;
}
}
}
//不计算第一个和最后一个
for(int n = 1; n < grade.length - 1; n++)
{
sum += grade[n];
}
return sum / (grade.length- 2) ;
}
}
package Average;
public class School implements ComputerAverage{
@Override
public double CalcGradeVal(double[] grade) {
double sum = 0.0;
for(int n = 0; n < grade.length; n++)
{
sum += grade[n];
}
System.out.println(sum);
return sum / grade.length ;
}
}
2、
package Trucks;
import java.util.Random;
public class Main {
public static void main(String args[]){
ComputerWeight[] goods =new ComputerWeight[650]; //650件货物
for(int i=0;i<goods.length;i++){ //电视、电脑、洗衣机轮流放进卡车里
if(i%3==0)
goods[i]=new Television();
else if(i%3==1)
goods[i]=new Computer();
else if(i%3==2)
goods[i]=new WashMachine();
}
Truck truck=new Truck(goods);
System.out.printf("\n货车装载的货物重量:%-8.5f kg\n",truck.getTotalWeights());
goods=new ComputerWeight[68]; //68件货物
for(int i=0;i<goods.length;i++){ //
if(i%2==0)
goods[i]=new Television();
else
goods[i]=new WashMachine();
}
truck.setGoods(goods);
System.out.printf("货车装载的货物重量:%-8.5f kg\n",truck.getTotalWeights());
}
}
package Trucks;
public interface ComputerWeight {
public double computerWeight();
}
package Trucks;
public class Truck {
ComputerWeight[] goods; //ComputerWeight接口类型的数组
double totalWeights=0;
Truck(ComputerWeight[] goods){
this.goods=goods;
}
public void setGoods(ComputerWeight[] goods){
this.goods=goods;
}
public double getTotalWeights(){
totalWeights=0;
//[代码4]计算totalWeights
for(int i=0;i<goods.length;i++){
totalWeights += goods[i].computerWeight();
}
return totalWeights;
}
}
package Trucks;
public class Computer implements ComputerWeight{
@Override
public double computerWeight() {
return 1;
}
}
package Trucks;
public class Television implements ComputerWeight{
@Override
public double computerWeight() {
return 2;
}
}
package Trucks;
public class WashMachine implements ComputerWeight{
@Override
public double computerWeight() {
return 5;
}
}
3、
package DogShow;
public class Main {
public static void main(String[] args) {
Dog yellowDog = new Dog();
System.out.println("狗在主人面前:");
yellowDog.setState(new MeetFriendState());
yellowDog.show();
System.out.println("狗遇到敌人:");
yellowDog.setState(new MeetEnemyState());
yellowDog.show();
System.out.println("狗遇到朋友:");
yellowDog.setState(new MeetFriendState());
yellowDog.show();
System.out.println("狗饿了:");
yellowDog.setState(new EatFood());
yellowDog.show();
}
}
package DogShow;
public interface DogState {
public void showState();
}
package DogShow;
public class Dog {
DogState state;
public void show()
{
state.showState();
}
public void setState(DogState state)
{
this.state = state;
}
}
package DogShow;
public class MeetEnemyState implements DogState{
@Override
public void showState() {
System.out.println("狗遇敌人,狂叫,并冲上去狠咬敌人");
}
}
package DogShow;
public class MeetFriendState implements DogState{
@Override
public void showState() {
System.out.println("遇到朋友,晃动尾巴,热烈欢迎");
}
}
package DogShow;
public class SoftlyState implements DogState{
@Override
public void showState() {
System.out.println("在主人面前,听主人的命令!");
}
}
package DogShow;
public class EatFood implements DogState{
@Override
public void showState() {
System.out.println("饿了,吃饭饭^-^,汪汪");
}
}