实验题目:

        卡车要装载一批货物,货物有3种商品:电视、冰箱和洗衣机。需要计算出大货车和小货车各自所装载的3种货物的总重量。编写一个Java应用程序:

(1)要求有一个ComputeWeight接口,该接口中有一个方法:public double computeWeight();

(2)有3个实现该接口的类:Television、Refrigerator和WashMachine。这3个类通过实现接口ComputeWeight给出自重。

(3)有一个Truck类,该类用ComputeWeight接口类型的数组作为成员,那么该数组的元素就可以存放Television对象的引用、Refrigerator对象的引用或WashMachine对象的引用。

(4)程序能输出Truck对象所装载的货物的总重量。

(5)控制台效果如下所示

如何让两个请求串行执行 java_如何让两个请求串行执行 java

 实验目的:

  1. 了解并且会使用上转型对象。
  2. 学会定义一个接口,并以此为父类接口,派生出三个子类。
  3. 熟悉数组的操作,将获取到的内容储存在里面。
  4. 学会使用方法重写,理解方法覆盖。
  5. 学会this关键字的使用。     

实验环境:

eclipse的版本: Mars.2 Release (4.5.2)

电脑系统:Windows 11

JDK版本:1.8.0_261

实验步骤:

1.创建ComputeWeight接口。

2.在该接口中定义一个计算重量的方法computeWeight(),并且在这个接口中创建一个public double computeWeight()方法。

3.分别创建Television、Refrigerator和WashMachine类,这三个类实现ComputeWeight接口。例如WashMachine类:它有一个double类型的成员变量washMachineweight,表示洗衣机的重量。构造函数WashMachine(double w)用于初始化洗衣机的重量。重写public double computeWeight()这个方法,computeWeight()方ComputeWeight接口中的抽象方法,该方法返回洗衣机的重量washMachineweight,并且可以计算洗衣机的重量。另外两个类和这个差不多一样照搬下来。

4.创建Truck类,接收一个ComputeWeight类型的数组作为参数,并将其赋值给类内部的goods数组。

5.在Truck类中,定义一个货物的总重量,并且初始化这个量为0,在主函数中创建Truck对象先创建了一个长度为3的ComputeWeight类型的数组goods,可以使用上转型对象(upcasting)将一个子类的对象赋值给父类类型的变量或引用,这里的ComputeWeight就是Television类的父接口。因此,可以将Television类的对象上转型为ComputeWeight类型,然后存储到ComputeWeight类型的数组goods中的第一个元素goods[0]中。

6.调用计算货物总重量的方法,并输出结果。

实验源代码(带注释):

ComputeWeight.java 代码如下:

public interface ComputeWeight {
public double computeWeight();
}
Television.java 代码如下:
public class Television implements ComputeWeight  {
//定义一个double类型的成员变量televisionweight,表示电视机的重量.
double televisionweight;
//构造函数Television(double televisionweight)用于初始化电视机的重量
Television(double televisionweight){
this.televisionweight= televisionweight;
}
//重写public double computeWeight()这个方法,该方法返回洗衣机的重量televisionweight,并且可以计算电视机的重量。
@Override
public double computeWeight() {
// TODO Auto-generated method stub
return televisionweight;
}
}
WashMachine.java代码如下:
public class WashMachine implements ComputeWeight {
//定义一个double类型的成员变量washMachineweight,表示洗衣机的重量.
double washMachineweight;
//构造函数WashMachine(double washMachineweight)用于初始化洗衣机的重量
WashMachine(double washMachineweight){
this.washMachineweight= washMachineweight;
}
//重写public double computeWeight()这个方法,该方法返回洗衣机的重量washMachineweight,并且可以计算洗衣机的重量。
@Override
public double computeWeight() {
// TODO Auto-generated method stub
return wweight;
}
}
Refrigerator.java代码如下:
public class Refrigerator implements ComputeWeight{
//定义一个double类型的成员变量refrigeratorweight,表示电冰箱的重量。
double refrigeratorweight;
//构造函数Refrigerator(double refrigeratorweight)用于初始化电冰箱的重量。
Refrigerator(double refrigeratorweight){
this.refrigeratorweight= refrigeratorweight;
}
//重写public double computeWeight()这个方法,该方法返回洗衣机的重量refrigeratorweight,并且可以计算电冰箱的重量。
@Override
public double computeWeight() {
// TODO Auto-generated method stub
return rweight;
}
}

Truck.java代码如下:

public class Truck {
ComputeWeight[] goods;
//接收一个ComputeWeight类型的数组作为参数,并将其赋值给类内部的goods数组。
Truck(ComputeWeight[] goods){
this.goods = goods;
}
public static void main(String[] args) {
//先创建了一个长度为3的ComputeWeight类型的数组goods,可以使用上转型对象(upcasting)将一个子类的对象赋值给父类类型的变量或引用,这里的ComputeWeight就是Television类的父接口。因此,可以将Television类的对象上转型为ComputeWeight类型,然后存储到ComputeWeight类型的数组goods中的第一个元素goods[0]中。
ComputeWeight[] goods = new ComputeWeight[3];
goods[0] = new Television(10);
goods[1] = new WashMachine(20);
goods[2] = new Refrigerator(30);
//在创建一个Truck类的对象truck,并将goods数组传递给Truck类的构造函数.通过实例化Truck类得到一个名为truck的对象,这个对象的goods属性被初始化为刚才创建的数组goods。
//new关键字会调用Truck类的构造函数来创建一个Truck对象,并将其赋值给变量truck。
Truck truck = new Truck(goods);
//设置初始的重量为0。
double totalweight = 0;
totalweight =goods[0].computeWeight()+goods[1].computeWeight()+goods[2].computeWeight();
System.out.println("所装货物总重量为:"+totalweight);
}
}

实验小结:

要计算总重量时,如何将这三个数据相加?

        这个问题的解决是和室友一起探讨的,可以设置一个长度为3的数组goods,然后将上转型对象调用子类的方法,并且传参,把冰箱,电视机,洗衣机的重量传进来,然后给储存到数组元素中,接着创建一个Truck类的对象truck,将goods数组传递给Truck类的构造函数,最后通过调用三个不同物品对象的computeWeight()方法得到的重量之和。