zoukankan      html  css  js  c++  java
  • 类继承多态,抽象类接口——练习题

    
           
        

    1.编写Student类包含如下属性,并实现给属性赋值且打印出来 年龄(0-100)不符合的设为18 姓名(只读属性) 爱好(读写)

    public class Student
    {
    int age;

    public int Age
    {
    get
    { return age;

    }
    set
    {
    if (value>0&&value<100)
    {
    age = value;
    }
    else
    {
    age = 18;
    }
    }
    }
    string name="xaioming";

    public string Name
    {
    get { return name; }

    }
    string hobby;

    public string Hobby
    {
    get { return hobby; }
    set { hobby = value; }
    }
    }

    Student stu = new Student();
    stu.Age = 1000;
    stu.Hobby = "basketball";
    Console.WriteLine(stu.Name);
    Console.WriteLine(stu.Age);
    Console.WriteLine(stu.Hobby);
    Console.ReadKey();

     2.

    某购物网站有多个网店,一个网店有多个会员,每个会员都有其会员账号和会员余额。 请创建网店类和会员类,要求实现以下功能 在网店类中,通过构造函数初始化多个会员对象,并可以通过索引值或会员账号查询或修改会员余额 在会员类中,通过构造函数中初始化会员账号和会员余额;修改会员账号时,要求会员账号必须是3位;查询会员余额时,如果会员余额小于等于0,则返回“无可用金额!”。 创建完网店类和会员类后,请访问网店类和会员类,初始化多个会员,并查询或修改会员余额

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace test
    {
        //2.某购物网站有多个网店,一个网店有多个会员,每个会员都有其会员账号和会员余额。    
        class wd
        {
            hy[] hys;
            public hy[] Hys
            {
                get { return hys; }
                set { hys = value; }
            }
            public wd(int capacity)
            {
                hys = new hy[capacity];
            }
            //创建索引器
            //在网店类中,通过构造函数初始化多个会员对象,并可以通过索引值或会员账号查询或修改会员余额
            public hy this[string hid]
            {
                get
                {
                    foreach (hy item in hys)
                    {
                        if (hid == item.Hid)
                        {
                            return item;
                        }
                    }
                    return null;
                }
                set
                {
                    for (int i = 0; i < hys.Length; i++)
                    {
                        if (hys[i].Hid == hid)
                        {
                            hys[i] = value;
                        }
                    }
                }
            }
            public hy this[int index]
            {
                get
                {
                    if (index >= 0 && index < hys.Length)
                    {
                        return hys[index];
                    }
                    else
                    {
                        return null;
                    }
                }
                set
                {
                    if (index >= 0 && index < hys.Length)
                    {
                        hys[index] = value;
                    }
                }
            }
        }
        class wz
        {
            wd[] wds;
            public wd[] Wds
            {
                get { return wds; }
                set { wds = value; }
            }
            public wz(int capacity)
            {
                wds = new wd[capacity];
            }
    
        }
        //在会员类中,通过构造函数中初始化会员账号和会员余额;       
        class hy
        {
            string hid;
            int balance;
            //修改会员账号时,要求会员账号必须是3位;
            public string Hid
            {
                get { return hid; }
                set
                {
                    if (hid.Length == 3)
                    {
                        hid = value;
                    }
                    else
                    {
                        Console.WriteLine("会员账号必须是三位!");
                    }
                }
            }
            //查询会员余额时,如果会员余额小于等于0,则返回“无可用金额!”。
            public int Balance
            {
                get { return balance; }
                set
                {
                    if (value <= 0)
                    {
                        Console.WriteLine("无可用金额!");
                    }
                    else
                    {
                        balance = value;
                    }
                }
            }
            public hy(string hid, int balance)
            {
                this.hid = hid;
                this.balance = balance;
            }
        }
        //创建完网店类0和会员类后,请访问网店类和会员类,初始化多个会员,并查询或修改会员余额
        class Program
        {
            static void Main(string[] args)
            {
                //创建一个包括三个网店的网站
                wz wz = new wz(3);
                //创建三个包括三个网店的网站
                wd wd1 = new wd(3);
                wd wd2 = new wd(3);
                wd wd3 = new wd(3);
                //将三个网店添加到网站
                wz.Wds[0] = wd1;
                wz.Wds[1] = wd2;
                wz.Wds[2] = wd3;
                //创建三个会员
                hy hy1 = new hy("001", 100);
                hy hy2 = new hy("001", 100);
                hy hy3 = new hy("001", 100);
                //将三个会员添加到网店
                wd1[0] = hy1;
                wd1[1] = hy2;
                wd1[2] = hy3;
                //通过hid修改balance
                wd1[0].Balance = 101;
                wd1["001"].Balance = 102;
                wd1["001"].Balance = 103;
                //输出网站第一个网店三个会员的信息
                foreach (hy item in wz.Wds[0].Hys)
                {
                    Console.WriteLine(item.Hid);
                    Console.WriteLine(item.Balance);
                }
                Console.ReadKey();
            }
        }
    }

    3.比较静态成员和非静态成员的区别,

    定义猫类,实例化多个猫类的对象,累计白猫和黑猫各多少只

    class Cat
        {
            private static int count1 = 0;
            public int count2 = 0;
            public Cat() 
            {
                count1 = count1 + 1;
                count2 = count2 + 1;
            }
            public static void Display1() 
            {
                Console.WriteLine("白猫的数量是:"+count1);
            }
            public void Display2() 
            {
                Console.WriteLine("黑猫的数量是:"+count2);
            }
           
        }
        
    
    
                Cat.Display1();
                Cat cat1 = new Cat();
                cat1.Display2();
                Cat cat2 = new Cat();
                cat2.Display2();
                Cat.Display1();
                Console.ReadKey();
                

    注:静态方法:类名+方法名(此时不调用构造函数) 只有定义对象初始化构造函数的时候才发生加1操作

    3..创建电器类,声明电器的属性:功率、额定电压、额定电流、交直流类型。电器的方法:工作方法。创建电视机类和冰箱类继承电器类,电视机增加属性:种类、最大音量,重写工作方法。电冰箱了增加属性:容量,重写工作方法。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication4
    {
        //    创建电器类,声明电器的属性:功率、额定电压、额定电流、交直流类型。
        //    电器的方法:工作方法。
        public class Electric 
        {
            int power;
    
            public int Power
            {
                get { return power; }
                set { power = value; }
            }
            int voltage;
            public int Voltage 
            {
                get { return voltage; }
                set { voltage = value; }
            }
            int current;
    
            public int Current
            {
                get { return current; }
                set { current = value; }
            }
            int type;
    
            public int Type
            {
                get { return type; }
                set { type = value; }
            }
            public virtual void work() 
            {
                Console.WriteLine("电器的工作方法");
            }
            public Electric(int po, int vo, int cu, int ty) 
            {
                this.power = po;
                this.voltage = vo;
                this.current = cu;
                this.type = ty;
            }
        }
        // 电视机增加属性:种类、最大音量,重写工作方法。创建电视机类继承电器类
        class Television : Electric 
        {
            string tetype;
    
            public string Tetype
            {
                get { return tetype; }
                set { tetype = value; }
            }
            int voice;
    
            public int Voice
            {
                get { return voice; }
                set { voice = value; }
            }
            public override void work()
            {
                base.work();
                Console.WriteLine("电视机工作");
            }
            public Television(int po, int vo, int cu, int ty, string te, int voic) : base(po, vo, cu, ty) 
            {
                this.tetype = te;
                this.voice = voic;
            }
            //重写电视机的ToString()方法,输出电视机的信息,并使用该方法。
            public override string ToString()
            {
                return this.Power + "_" + this.voice + "_" + this.Type + "_" + this.tetype + "_"+this.voice;
            }
    
        }
        // 电冰箱了增加属性:容量,重写工作方法。创建冰箱类继承电器类,
        class Refiger : Electric 
        {
            int capacity;
    
            public int Capacity
            {
                get { return capacity; }
                set { capacity = value; }
            }
            public override void work()
            {
                base.work();
                Console.WriteLine("电冰箱工作");
            }
            public Refiger(int po, int vo, int cu, int ty,int ca):base(po,vo,cu,ty)
            {
                this.capacity = ca;
            }
    
        }
        class Program
        {
            static void Main(string[] args)
            {
                Television te = new Television(1,2,3,4,"sanxing",10);
                te.work();
                
                Console.WriteLine(te.ToString());
                Console.WriteLine(te.Voice);
                Refiger re = new Refiger(1, 2, 3, 4, 5);
                re.work();
                Console.ReadKey();
            }
        }
    }
     

    4.测试程序结果:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication4
    {
        class A
        {
            public string s = "A";
        }
        class B : A
        {
            new public string s = "B";
        }
    
        
        class Program
        {
            static void Main(string[] args)
            {
                A a1 = new B();
                B b1 = (B)a1;
                System.Console.WriteLine(b1.s);
                B b2 = new B();
                A a2 = b2;
                A a3 = b2;
                System.Console.WriteLine(a2.s);
                System.Console.WriteLine(((B)a3).s);
                Console.ReadKey();
    
                
            }
        }
    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication4
    {
        class A
        {
            public string s = "A";
            public  void work() 
            {
                Console.WriteLine("sss");
            }
        }
        class B : A
        {
            new public string s = "B";
             new public  void work() 
            {
                Console.WriteLine("WWWWW");
            }
        }
    
    
        class Program
        {
            static void Main(string[] args)
            {
                A a1 = new B();
                a1.work();
                System.Console.WriteLine(a1.s);
                B b2 = new B();
                A a2 = b2;
                A a3 = b2;
                System.Console.WriteLine(a2.s);
                System.Console.WriteLine(((B)a3).s);
                Console.ReadKey();
    
    
            }
        }
    }

    运行原理: 基类的引用指向派生类的对象,  注意区别方法的隐藏和方法的覆盖(重写)比如 A  aa = new B; 则访问的是A中的成员  A的引用访问不到B

    5.编写一个C#应用程序,设计一个汽车类 Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car 是Vehicle 的子类,其中包含的属性有载人数 loader。卡车类 Truck 是Car类的子类,其中包含的属性有载重量 payload。每个类都有构造方法和输出相关数据的方法 。编写测试类CarTest进行测试。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication4
    {
        //设计一个汽车类 Vehicle,包含的属性有车轮个数 wheels和车重weight
        public class Vehicle
        {
            int wheels;
    
            public int Wheels
            {
                get { return wheels; }
                set { wheels = value; }
            }
            int weight;
    
            public int Weight
            {
                get { return weight; }
                set { weight = value; }
            }
            public Vehicle(int whe, int wei) 
            {
                this.wheels = whe;
                this.weight = wei;
            }
            public override string ToString()
            {
                return this.wheels+"_"+this.weight;
            }
        }
        //    小车类Car 是Vehicle 的子类,其中包含的属性有载人数 loader。
        public class Car : Vehicle 
        {
            int loader;
    
            public int Loader
            {
                get { return loader; }
                set { loader = value; }
            }
            public Car(int whe, int wei, int loa) : base(whe, wei) 
            {
                this.loader = loa;
            }
            public override string ToString()
            {
                return this.Wheels + "_" + this.Weight+"_"+this.loader;
            }
        }
        
        // 卡车类 Truck 是Car类的子类,其中包含的属性有载重量 payload。
        class Trunk : Car 
        {
            int payload;
            public Trunk(int whe, int wei, int loa, int pal) : base(whe, wei,loa) 
            {
                this.payload = pal;
            }
            public override string ToString()
            {
                return this.Wheels + "_" + this.Weight + "_" + this.Loader+"_"+this.payload;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
             
               // 每个类都有构造方法和输出相关数据的方法 。编写测试类CarTest进行测试。
                Vehicle ve = new Vehicle(4,100);
                Console.WriteLine(ve.ToString());
                Car ca = new Car(5,100,50);
                Console.WriteLine(ca.ToString());
                Trunk tr = new Trunk(6,100,50,70);
                Console.WriteLine(tr.ToString());
                Console.ReadKey();
    
                
            }
        }
    }

     6.基类的引用指向子类的对象。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication4
    {
        class A
        {
            public virtual void fun()
            {
                System.Console.Write(" A");
            }
        }
        class B : A
        {
            public override void fun()
            {
                System.Console.Write(" B");
            }
        }
        class C : A
        {
            public override void fun()
            {
                System.Console.Write(" C");
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                A a1 = new B();
                a1.fun();
                a1 = new C();
                a1.fun();
                Console.ReadKey();
        
            }
        }
    }

    7.对平面形体有长和面积,对立体有表面积和体积,对几何图形基类,周长、面积和体积应怎样计算(用什么函数)?对平面图形体积怎样计算(用什么函数)?对立体图形周长怎么计算(用什么函数)?要求实现运行时的多态性。请编程,并测试。

    8.请编码实现如下需求: 乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin) 各种乐器的弹奏( play )方法各不相同。 编写一个测试类InstrumentTest,要求: 编写方法testPlay,对各种乐器进行弹奏测试。要依据乐器的不同,进行相应的弹奏。 在main方法中进行测试

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication4
    {
        public class Instrument 
        {
            public virtual void testPlay() 
            {
                Console.WriteLine("弹奏:");
            }
        }
        class Pinao : Instrument 
        {
            public override void testPlay()
            {
                base.testPlay();
                Console.WriteLine("钢琴弹奏");
            }
        }
        class Violin : Instrument 
        {
            public override void testPlay()
            {
                base.testPlay();
                Console.WriteLine("小提琴弹奏");
            }
        }
        class InstrumentTest 
        {
            public void test(Instrument ins) 
            {
                ins.testPlay();
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                InstrumentTest ins1 = new InstrumentTest();
                InstrumentTest ins2 = new InstrumentTest();
                Pinao pi = new Pinao();
                Violin vi = new Violin();
                ins1.test(pi);
                ins2.test(vi);
                Console.ReadKey();
    
            }
        }
    }

     9一个运输公司从网上得到订单,订单上标有货物重量和运输里程,该公司可以使用3中运输工具:卡车、火车、飞机。编写运输接口,声明3个接口常量,表示运输工具,声明一个计算运费的方法,参数是重量和里程。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication4
    {
        public interface Ivehicel
        {
           int money(int weigth, int distance);
        }
        public class Trunk :Ivehicel
        {
            public int money(int weigth, int distance)
            {
                if (weigth < 60 && distance < 1000)
                {
                    int mm = weigth * distance * 120;
                    return mm;
                }
                else 
                {
                    return -1;
                }
                
            }
    
        }
        public class Train : Ivehicel 
        {
            public int money(int weigth, int distance) 
            {
                if (distance < 900)
                {
                    return weigth * distance * 250;
                }
                else 
                {
                   return  weigth*distance*300;
                }
            }
        }
        public class Fight : Ivehicel 
        {
            public int money(int weigth, int distance) 
            {
                if (distance > 500)
                {
                    return weigth * distance * 750;
                }
                else 
                {
                    return -1;
                }
            }
        }
       
        class Program
        {
            static void Main(string[] args)
            {
               Console.WriteLine("输入货物重量和运输里程");
                int wei = Convert.ToInt32(Console.ReadLine());
                int bal = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("选择交通工具:1:卡车,2:火车,3:飞机");
                int tra = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("运费为:");
                switch (tra)
                {
                    case 1: 
                        {
                            
                        Trunk tr = new Trunk();
                        
                        Console.WriteLine(tr.money(wei,bal));
                        break;
                        }
                    case 2: 
                        {
                            Train train1 = new Train();
                            
                            Console.WriteLine(train1.money(wei, bal));
                            break;
                        }
                    case 3:
                        {
                            Fight figth1 = new Fight();
                           
                            Console.WriteLine( figth1.money(wei, bal));
                            break;
                        }
                        
               
                }
                Console.ReadKey();
                       
    
    
                
    
            }
        }
    }

  • 相关阅读:
    (转)详谈高端内存和低端内存
    高级声明------定义一个函数指针数组指针
    A Bug's Life POJ
    How Many Answers Are Wrong HDU
    A
    B
    数据处理----离散化
    Serval and Parenthesis Sequence CodeForces
    D
    C
  • 原文地址:https://www.cnblogs.com/sunxiaoyan/p/8323675.html
Copyright © 2011-2022 走看看