黑马程序员技术交流社区

标题: 哎,一道入学测试题,差点丢脸了,大家提提意见 [打印本页]

作者: 不怕    时间: 2013-6-29 17:49
标题: 哎,一道入学测试题,差点丢脸了,大家提提意见
本帖最后由 不怕 于 2013-6-29 17:51 编辑

定义父亲类Father(姓firstName,财产wealth,血型blood),儿子Son类(玩游戏PlayGame),女儿Daughter类(跳舞Dance),调用父类构造函数给子类字段赋值
作者: 不怕    时间: 2013-6-29 17:50
这个答案你看如何:
  1. class Father
  2.     {
  3.         public string firstName;
  4.         public int wealth;
  5.         public string blood;
  6.         public Father(){}
  7.         public Father(string f,int w,string b)
  8.         {
  9.             firstName = f;
  10.             wealth = w;
  11.             blood = b;
  12.         }

  13.     }
  14.     class Son : Father
  15.     {
  16.         public Son() { }
  17.         //无参构造函数Son a = new Son();
  18.         //若没有此函数则Son a = new Son ("王",100,"A" )
  19.         public Son(string f,int w,string b)
  20.         {
  21.             firstName = f;
  22.             wealth = w;
  23.             blood = b;
  24.         }
  25.         public void PlayGame()
  26.         {
  27.             Console.WriteLine("我姓{0},财富是{1},血型{2}", firstName, wealth, this.blood);
  28.             Console.WriteLine("我爱玩游戏");
  29.         }
  30.     }
  31.     class Daughter : Father
  32.     {
  33.         public void Dance()
  34.         {
  35.             Console.WriteLine("我姓{0},财富是{1},血型{2}", firstName, wealth, this.blood);
  36.             Console.WriteLine("我爱跳舞");
  37.         }
  38.         public Daughter() { }
  39.         public Daughter(string f, int w, string b)
  40.         {
  41.             firstName = f;
  42.             wealth = w;
  43.             blood = b;
  44.         }
  45.     }
  46.     class Program
  47.     {
  48.         static void Main(string[] args)
  49.         {
  50.             Son a = new Son();
  51.             a.firstName = "王";
  52.             a.wealth = 100;
  53.             a.blood = "A";
  54.             a.PlayGame();
  55.             Daughter b = new Daughter();
  56.             b.firstName = "王";
  57.             b.wealth = 500;
  58.             b.blood = "B";
  59.             b.Dance();
  60.             Console.ReadKey();
  61.         }
  62.     }
复制代码

作者: zms2100    时间: 2013-6-29 20:07
因为不是这版块(学的是Java而非C#)的,所以就不班门弄斧贴代码了,以Java的观点说下可改进的地方吧。
1、子类继承父类,如果构造函数的参数列表不变的话,应该可以调用父类的构造方法;(Java是super();,而C#好像是base(); ,不知道对不啊。)
2、它题目说明了要父类构造函数给子类字段赋值:   
A、不知道是否是采用多态的特性?  
B、有对应的构造函数为什么不直接 new Daughter("王",500,"B")等;
C、当然如果是使用多态赋值的话就要对对象进行强转,才能调用子类特有的方法。
作者: 不怕    时间: 2013-6-29 21:51
zms2100 发表于 2013-6-29 20:07
因为不是这版块(学的是Java而非C#)的,所以就不班门弄斧贴代码了,以Java的观点说下可改进的地方吧。
1、子 ...

哥们谢了!
作者: 菜鸟励志要逆袭    时间: 2013-7-2 17:11
class Program
    {
        static void Main(string[] args)
        {
            Son s=new Son("盖",9.9,"A","伦");
            Daughter d = new Daughter("皎月", 9.99, "O","女神");
            Console.WriteLine("盖伦在玩游戏:");
            s.Print();
            s.PlayGame();
            Console.WriteLine("皎月女神在跳舞:");
            d.Print();
            d.Dance();
            Console.ReadKey();
        }
    }


    class Father
    {
        public Father() { }
        public Father(string firstName, double wealth, string blood)
        {
            this.firstName = firstName;
            this.wealth = wealth;
            this.blood = blood;

        }
        string firstName;

        public string FirstName
        {
            get { return firstName; }
            set { firstName = value; }
        }
        double wealth;

        public double Wealth
        {
            get { return wealth; }
            set { wealth = value; }
        }
        string blood;

        public string Blood
        {
            get { return blood; }
            set { blood = value; }
        }
        public void PlayGame()
        {
            Console.WriteLine("我姓{0},我的财富是{1},我的血型是{2},我在玩游戏!", firstName, wealth, blood);
        }
        public void Dance()
        {
            Console.WriteLine("我姓{0},我的财富是{1},我的血型是{2},我在跳舞!", firstName, wealth, blood);
        }
    }

  class Son : Father
    {
        public Son() { }
        public Son(string firstName,double wealth,string blood,string name)
            :base(firstName, wealth, blood)
        {
            this.name = name;
        }
        string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public void Print()
        {
            Console.WriteLine("我的名字是{0}", name);
        }
    }

  class Daughter : Father
    {
        public Daughter() { }
        public Daughter(string firstName,double wealth,string blood,string name)
            :base(firstName, wealth, blood)
        {
            this.name = name;
        }
        string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public void Print()
        {
            Console.WriteLine("我的名字是{0}", name);
        }
    }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2