C#实验三——类和接口的使用

目录

实验内容

实验要求

编码环境

代码实现

效果展示

实验心得

实验改进


实验内容

编程实现"交通工具vehicle"、"火车train"、"客车coach"、"货车truck"、"汽车automobile"、"轿车car"、"微型货车minivan"类,并编写"载人"、"载货"接口,实现人员的上下车和货物的装卸货。

实验要求

  1. 设计上述类和类间关系,实现构造部分
  2. 设计上述接口,并交给各个类实现
  3. 编制主函数对上述类和接口进行测试
  4. 代码符合编码规范

具体关系如下:

  • 火车是抽象类
  • 火车的派生类有:客车、货车
  • 汽车是抽象类
  • 汽车的派生类有轿车、微型货车
  • 火车和汽车派生于交通工具类
  • 接口:载客(人上车、人下车)、载货(装货、卸货)

编码环境

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();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二琳爱吃肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值