✨作者:命运之光
✨专栏:Java面向对象程序设计实验报告
目录
✨一、需求设计
✨二、概要设计
✨三、详细设计
✨四、调试结果
✨五、测试结果
✨附录:源程序代码(带注释)
demo4类
Car类
Circle类
Shape类
Triangle类
Truck类
Vehicle类
实验四 抽象类的练习
实验环境:Eclipse+JDK
实验目的:
- 掌握并理解面向对象的编程思想;
- 熟练掌握类和对象的定义及使用;
- 掌握抽象类的概念,特点及其使用。
实验内容:
1、编写一个程序,设计一个汽车抽象类Vehicle,包含的属性有车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。
(1)每个类都有构造方法进行属性初始化;
(2)抽象类Vehicle类具有输出相关数据信息的抽象方法;
(3)Car,Truck子类覆写抽象类的抽象方法,并给子类分别添加一个子类特有的方法(内容自定);
(4)使用Test类中的main方法实例化Car,Truck,并输出相关信息(分别练习向上转型和向下转型)。
2、定义Shape抽象类,包含私有属性color,创建构造器为color赋值;包含计算周长的方法celPerimeter();定义子类Triangle,包含三边;定义子类Circle,包含半径radius;子类分别实现父类的计算周长功能。
以下是实验报告内容
✨✨前言:由于五一假期导致最后一节Java上机实验课没有上,所以不是很清楚实验报告的具体要求,我就按照之前数据结构实验报告的格式写了这次的Java上级报告,有需要的还是直接复制粘贴就行了,不过这次我写的比较敷衍,自己要上交实验报告的话,最好还是稍微修改美化一下🦄。
✨一、需求设计
编写一个程序,设计一个汽车抽象类Vehicle,包含的属性有车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。
(1)每个类都有构造方法进行属性初始化;
(2)抽象类Vehicle类具有输出相关数据信息的抽象方法;
(3)Car,Truck子类覆写抽象类的抽象方法,并给子类分别添加一个子类特有的方法(内容自定);
(4)使用Test类中的main方法实例化Car,Truck,并输出相关信息(分别练习向上转型和向下转型)。
定义Shape抽象类,包含私有属性color,创建构造器为color赋值;包含计算周长的方法celPerimeter();定义子类Triangle,包含三边;定义子类Circle,包含半径radius;子类分别实现父类的计算周长功能。
✨二、概要设计
本实验设计了七个类,一个测试类demo4,一个汽车抽象类Vehicle,包含的属性有车轮个数wheels和车重weight,一个小车类Car是Vehicle的子类,其中包含的属性有载人数loader,一个卡车类Truck是Car类的子类,其中包含的属性有载重量payload。一个Shape抽象类包含私有属性color,创建构造器为color赋值;包含计算周长的方法celPerimeter();定义子类Triangle,包含三边;定义子类Circle,包含半径radius;子类分别实现父类的计算周长功能。
✨三、详细设计
新建一个class类类名为Vehicle,包含的属性有车轮个数wheels和车重weight。
public int wheels;//车轮个数
public double weight;//车重
写入空参和全参方法
Vehicle(){}//空参构造
Vehicle(int wheels,double weight)//全参构造
{
this.wheels=wheels;
this.weight=weight;
}
最后定义输出相关信息
public abstract String put();//输出相关信息
新建一个class类类名为Car是Vehicle的子类,其中包含的属性有载人数loader
public int loader;
构造Car类的无参有参两参构造。
Car(){}
Car(int loader,int wheels,double weight)
{
super(wheels,weight);
this.loader=loader;
}
重写put方法
public String put()
{
System.out.println("小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人");
return "小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人";
}
定义汽车的特有方法
public void cardemo()
{
System.out.println("汽车的特有方法");
}
新建一个class类Truck是Car类的子类,其中包含的属性有载重量payload
public double payload;
写入空参和全参方法
Truck(){}
Truck(double payload)
{
super();
this.payload=payload;
}
Truck(double payload,int wheels,double weight)
{
super(wheels,weight);
this.payload=payload;
}
重写put方法
public String put()
{
System.out.println("卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克");
return "卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克";
}
新建一个class类Shape抽象类包含私有属性color,创建构造器为color赋值;
private String color;
无参有参构造
Shape(){}
Shape(String color)
{
this.color=color;
}
setter,getter重写为color赋值。
public String setColor(String color)
{
this.color=color;
return this.color;
}
public String getColor()
{
return this.color;
}
计算周长的方法。
public abstract double celPerimeter();
创建一个class类类名为Triangle是Shape的子类,三边为私有属性。
private double a;
private double b;
private double c;
无参有参构造
Circle(){}
Circle(double radius,String color)
{
super(color);
this.radius=radius;
}
重写celPerimeter方法
public double celPerimeter()
{
return 2*radius*3.14;
}
创建一个class类类名为Circle是Shape的子类,私有属性为半径。
private double radius;
无参有参构造
Circle(){}
Circle(double radius,String color)
{
super(color);
this.radius=radius;
}
重写celPerimeter方法
public double celPerimeter()
{
return 2*radius*3.14;
}
✨四、调试结果
输入第一题的测试样例为:
小车车轮数为:3;小车车重为:4.0载人数为:800人
卡车车轮数为:6;卡车车重为:1500.0卡车载重为:2000.0千克
汽车的特有方法
小车车轮数为:3;小车车重为:4.0载人数为:1000人
测试结果如图所示:
输入第二题的测试样例为:
三角形三边为6,7,8颜色为红色,圆形的半径为3颜色为蓝色。
测试结果如图所示:
✨五、测试结果
依照实验要求输入第一题样例为:
小车车轮数为:4;小车车重为:5.0载人数为:1000人
卡车车轮数为:8;卡车车重为:2000.0卡车载重为:2500.0千克
汽车的特有方法
小车车轮数为:4;小车车重为:5.0载人数为:1000人
测试结果如图所示:
依照实验要求输入第二题样例,三角形三边为3,4,5颜色为红色,圆形的半径为4颜色为蓝色。
测试结果如图所示:
✨附录:源程序代码(带注释)
demo4类
package 命运之光;
public class demo4 {
public static void main(String[] args)
{
System.out.println("----------第一题-------------");
Car c=new Car(1000,4,5);
Vehicle v =new Car(1000,4,5);//向上转型
Vehicle v11 =new Truck(2500,8,2000);
Truck t=new Truck(2500,8,2000);
c.put();
t.put();
Car v1 =(Car) v ;//向下转型
v1.cardemo();
v.put();
System.out.println("----------第二题-------------");
Triangle T=new Triangle(3,4,5,"红色");
Circle C=new Circle(4,"蓝色");
System.out.println("三角形周长为:"+T.celPerimeter()+"颜色为:"+T.getColor());
System.out.println("圆形周长为:"+C.celPerimeter()+"颜色为:"+C.getColor());
}
}
Car类
package 命运之光;
public class Car extends Vehicle {
public int loader;
Car(){}
Car(int loader)
{
super();
this.loader=loader;
}
Car(int loader,int wheels,double weight)
{
super(wheels,weight);
this.loader=loader;
}
public String put()
{
System.out.println("小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人");
return "小车车轮数为:"+wheels+";小车车重为:"+weight+"载人数为:"+loader+"人";
}
public void cardemo()
{
System.out.println("汽车的特有方法");
}
}
Circle类
package 命运之光;
public class Circle extends Shape{
private double radius;
Circle(){}
Circle(double radius,String color)
{
super(color);
this.radius=radius;
}
public double celPerimeter()
{
return 2*radius*3.14;
}
}
Shape类
package 命运之光;
public abstract class Shape {
private String color;
Shape(){}
Shape(String color)
{
this.color=color;
}
public String setColor(String color)
{
this.color=color;
return this.color;
}
public String getColor()
{
return this.color;
}
public abstract double celPerimeter();
}
Triangle类
package 命运之光;
public class Triangle extends Shape{
private double a;
private double b;
private double c;
Triangle(){}
Triangle(double a,double b,double c,String color)
{
super(color);
this.a=a;
this.b=b;
this.c=c;
}
public double celPerimeter()
{
return a+b+c;
}
}
Truck类
package 命运之光;
public class Truck extends Vehicle {
public double payload;
Truck(){}
Truck(double payload)
{
super();
this.payload=payload;
}
Truck(double payload,int wheels,double weight)
{
super(wheels,weight);
this.payload=payload;
}
public String put()
{
System.out.println("卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克");
return "卡车车轮数为:"+wheels+";卡车车重为:"+weight+"卡车载重为:"+payload+"千克";
}
}
Vehicle类
package 命运之光;
public abstract class Vehicle {
public int wheels;//车轮个数
public double weight;//车重
Vehicle(){}//空参构造
Vehicle(int wheels,double weight)//全参构造
{
this.wheels=wheels;
this.weight=weight;
}
public abstract String put();//输出相关信息
}