目录
实验内容
编程实现"交通工具vehicle"、"火车train"、"客车coach"、"货车truck"、"汽车automobile"、"轿车car"、"微型货车minivan"类,并编写"载人"、"载货"接口,实现人员的上下车和货物的装卸货。
实验要求
- 设计上述类和类间关系,实现构造部分
- 设计上述接口,并交给各个类实现
- 编制主函数对上述类和接口进行测试
- 代码符合编码规范
具体关系如下:
- 火车是抽象类
- 火车的派生类有:客车、货车
- 汽车是抽象类
- 汽车的派生类有轿车、微型货车
- 火车和汽车派生于交通工具类
- 接口:载客(人上车、人下车)、载货(装货、卸货)
编码环境
Vistual Studio Code
代码实现
火车类:train.cs
using System;
namespace shiyan3
{
class truck:train,CarryGoods,CarryPeople
{
void CarryGoods.GoodsUp()=>Console.WriteLine("货车装货");
void CarryGoods.GoodsDown()=>Console.WriteLine("货车卸货");
void CarryPeople.PeopleUp() => Console.WriteLine("微型货车:人上车");
void CarryPeople.PeopleDown() => Console.WriteLine("微型火车:人上车");
public int GoodCapacity{set;get;}
public string TruckName{set;get;}
public truck(){
GoodCapacity=100;
TruckName="货车";
Console.WriteLine("默认构造truck");
}
public truck(int goodcapacity,string truckname){
GoodCapacity=goodcapacity;
TruckName=truckname;
Console.WriteLine("用goodcapacity和truckname构造truck");
}
}
}
客车类:coach.cs
using System;
namespace shiyan3
{
class coach:train,CarryGoods,CarryPeople
{
void CarryPeople.PeopleDown() => Console.WriteLine("客车:人上车");
void CarryPeople.PeopleUp() => Console.WriteLine("客车:人下车");
public string CoachName{set;get;}
public coach(){
CoachName="客车1号";
Console.WriteLine("默认构造coach");
}
public coach(int mannedcapacity,string coachname){
MannedCapacity=mannedcapacity;
CoachName=coachname;
Console.WriteLine("用mannedcapacity、coach构造coach");
}
}
}
货车类:truck.cs
using System;
namespace shiyan3
{
class truck:train,CarryGoods,CarryPeople
{
void CarryGoods.GoodsUp()=>Console.WriteLine("货车装货");
void CarryGoods.GoodsDown()=>Console.WriteLine("货车卸货");
void CarryPeople.PeopleUp() => Console.WriteLine("微型货车:人上车");
void CarryPeople.PeopleDown() => Console.WriteLine("微型火车:人上车");
public int GoodCapacity{set;get;}
public string TruckName{set;get;}
public truck(){
GoodCapacity=100;
TruckName="货车";
Console.WriteLine("默认构造truck");
}
public truck(int goodcapacity,string truckname){
GoodCapacity=goodcapacity;
TruckName=truckname;
Console.WriteLine("用goodcapacity和truckname构造truck");
}
}
}
汽车类:automobile.cs
using System;
namespace shiyan3
{
abstract class automobile :vehicle,CarryGoods,CarryPeople
{
public void PeopleDown()
{
Console.WriteLine("汽车:人上车");
}
public void PeopleUp()
{
Console.WriteLine("汽车:人下车");
}
public void GoodsUp()
{
Console.WriteLine("汽车:装货");
}
public void GoodsDown()
{
Console.WriteLine("汽车:卸货");
}
public string AutomobileName{set;get;}
public automobile(){
AutomobileName="汽车1号";
Console.WriteLine("默认构造automobile");
}
public automobile(int mannedcapacity,string automobilename){
MannedCapacity=mannedcapacity;
AutomobileName=automobilename;
Console.WriteLine("用mannedcapacity、automobilename构造automobile");
}
}
}
轿车类:car.cs
using System;
namespace shiyan3
{
class car:automobile,CarryPeople
{
void CarryPeople.PeopleDown()=>Console.WriteLine("轿车:人上车");
void CarryPeople.PeopleUp()=>Console.WriteLine("轿车:人下车");
public string CarName{set;get;}
public car(){
CarName="轿车1号";
Console.WriteLine("默认构造car");
}
public car(int mannedcapacity,string carname){
MannedCapacity=mannedcapacity;
CarName=carname;
Console.WriteLine("用mannedcapacity、carname构造car");
}
}
}
微型货车:minivan.cs
using System;
namespace shiyan3
{
class minivan: automobile,CarryGoods,CarryPeople
{
void CarryGoods.GoodsDown() => Console.WriteLine("微型货车:卸货");
void CarryGoods.GoodsUp() => Console.WriteLine("微型货车:装货");
void CarryPeople.PeopleUp() => Console.WriteLine("微型货车:人上车");
void CarryPeople.PeopleDown() => Console.WriteLine("微型火车:人上车");
public string MinivanName{set;get;}
public minivan(){
Console.WriteLine("默认构造minivan");
}
public minivan(int goodcapacity,string minivanname){
Console.WriteLine("用goodcapacity和minivanname构造minivan");
}
}
}
交通工具类:vehicle.cs
载人、载货接口
using System;
namespace shiyan3
{
interface CarryPeople{
void PeopleUp();
void PeopleDown();
void GoodsUp();
}
interface CarryGoods{
void GoodsUp();
void GoodsDown();
}
class vehicle
{
private int _mannedCapacity;
public int MannedCapacity{
set{
if(value<0){
_mannedCapacity=0;
}
else{
_mannedCapacity=value;
}
}
get{
return _mannedCapacity;
}
}
public vehicle(){
_mannedCapacity=0;
Console.WriteLine("默认构造vehicle");
}
public vehicle(int mannedcapacity){
_mannedCapacity=mannedcapacity;
Console.WriteLine("用mannedcapacity默认构造vehicle");
}
}
}
测试类:Program.cs
using System;
namespace shiyan3
{
class Program
{
static void Main(string[] argc)
{
//交通工具
Console.WriteLine("myvehicle1:");
vehicle myvehicle1 = new vehicle();
Console.WriteLine("myvehicle2:");
vehicle myvehicle2 = new vehicle(1);
//火车
Console.WriteLine("mytrain1:");
//看了帖子说抽象类不能直接用new实例化对象,可以通过子类继承,实例化子类时抽象类也会被实例化
train mytrain1= new truck();
Console.WriteLine("mytrain2:");
train mytrain2=new truck(10000,"火车2号");
//货车
Console.WriteLine("mytruck1:");
truck mytruck1 = new truck();
mytruck1.GoodsDown();
mytruck1.GoodsUp();
Console.WriteLine("mytruck2:");
truck mytruck2 = new truck(1000, "货车2号");
//微型货车
Console.WriteLine("myminivan1:");
minivan myminivan1=new minivan();
myminivan1.GoodsDown();
myminivan1.GoodsUp();
Console.WriteLine("myminivan2");
minivan myminivan2=new minivan(2000,"微型火车2号");
myminivan2.GoodsUp();
myminivan2.GoodsDown();
//汽车
Console.WriteLine("myautomobile1");
automobile myautomobile1=new minivan();
myautomobile1.PeopleDown();
myautomobile1.PeopleUp();
Console.WriteLine("myautomobile2");
automobile myautomobile2=new minivan(3,"汽车2号");
myautomobile2.PeopleUp();
myautomobile2.PeopleDown();
//客车
Console.WriteLine("mycoach1");
coach mycoach1=new coach();
mycoach1.PeopleDown();
mycoach1.PeopleUp();
Console.WriteLine("mycoach2");
coach mycoach2=new coach();
mycoach2.PeopleDown();
mycoach2.PeopleUp();
//轿车
Console.WriteLine("mycar1:");
car mycar1=new car();
mycar1.PeopleUp();
mycar1.PeopleDown();
car mycar2=new car(4,"轿车2号");
mycar2.PeopleUp();
mycar2.PeopleDown();
}
}
}
效果展示
实验心得
抽象类不能直接用new方法来实例化,想要实例化可以通过调用子类来实现。
实验改进
俺们老师说他的意思是调用接口,如下:
CarryPeople a= mytrain1;
mytrain1.PeopleDown();