不知道这么写符合面向对象不?大家发表!
    class action
    {
        public virtual void Call()
        {
           
        }
    }
    class cat:action
    {
        public override void Call()
        {
            Console.WriteLine("猫叫!");
        }
    }
    class mouse:action
    {
        public override void Call()
        {
            Console.WriteLine("老鼠跑!");
        }
    }
    class person : action
    {
        public override void Call()
        {
            Console.WriteLine("人被吵醒!");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            action[] at = new action[3];
            at[0] = new cat();
            at[1] = new mouse();
            at[2] = new person();
            foreach (action a in at)
            {
                a.Call();
            }
            Console.ReadLine();
        }
    }

解决方案 »

  1.   

    你这个连应用领域都没有理解,又跟“符合面向对象”如何扯上关系?这个所谓“猫叫!老鼠跑!人被吵醒!”是要你用代码描述一个消息通知机制。而你的代码            action[] at = new action[3]; 
                at[0] = new cat(); 
                at[1] = new mouse(); 
                at[2] = new person(); 
                foreach (action a in at) 
                { 
                    a.Call(); 
                } 
    描述的是什么?上帝推动地球运转么?假设别人让你写个POS程序实现“如果顾客买东西,我就划价收钱”,结果你理解为你写个Main程序用代码来写:“第一步,顾客买xx东西;第二步,我收yy钱”么?所需要建模的对象之间的消息触发机制,模拟猫叫怎么会使得老鼠跑(以及猫不叫老鼠就没有跑),模拟猫叫怎么会使得人被吵醒(以及猫不叫则人就没有没吵醒)。你的那种“a.Call();”代码让我看了有些悲哀。
      

  2.   

    面向对象分析设计,才是你应该学习的。而这个技术跟编程可以说没有关系,既可以给机器使用也可以给人使用。是否“符合面向对象”不要拿OOPL来套,不要因为使用了所谓的继承、接口之类的就说的OO设计。你应该知道为什么要使用,这才是要点。如果你为了计算机编程上方便一点,那么你就本末倒置地滥用了OO,你的貌似比较时髦的代码就比那些只会使用C语言的人写获取更加缺乏OO知识。面向对象分析设计,首先要脱离开编程,研究语言、逻辑、建模,研究什么样的对象才可能继承,研究如何继承才能奇迹般地减少对象之间的耦合关联,不至于荒唐地把人的父子关系或者遗产继承关系说成是继承关系。脱离开低级的编程概念,去面向应用领域知识去建模,才能学到面向对象知识。
      

  3.   

    典型的用C#写java代码...using System;
    public delegate void CatShoutEvent ();
    class Cat{
    public event CatShoutEvent OnShout; public void Shout(){
    Console.WriteLine ("Cat Shout");
        if (OnShout!= null)
         OnShout();
    }
    }class Rat{
    public void Run ()
    {
    Console.WriteLine ("Rat Run");
    }
    }
    class Man
    {
    public void WakeUp ()
    {
    Console.WriteLine ("Man Wakeup");
    }
    }class test
    {
    static void Main ()
    {
    Cat cat = new Cat();
    Rat rat = new Rat();
    Man man = new Man ();
    cat.OnShout += rat.Run;
    cat.OnShout += man.WakeUp;
    cat.Shout();
    }
    }
      

  4.   

    俺说错了...没注意看Main,就算java也不会是这样写滴~~~
    5L说滴好.猫耗子和人的动作不是由你这个"上帝"来推动的
    或者说你这个"上帝"推动猫叫了剩下的耗子和人应该就自然
    做出反应,而不是由你这个"上帝"让他们做出反应.
      

  5.   

    猫叫!老鼠跑!人被吵醒!老板晚上没睡好!
    第二天老板发飙!我在上CSDN!被老板看见!我被开除!
    我去打猫!猫叫!老鼠跑!...
      

  6.   

    Call 应该用接口 标识 has,而不是is-a
      

  7.   

    观察者模式的考察罢了~~using System;namespace Cat
    {
        public delegate void SubEventHandler(object sender,EventArgs e);
        public class Subject 
        {
            public event SubEventHandler subEvent;
            public virtual void OnAction(EventArgs e)
            {
                if (subEvent != null)
                {
                    subEvent(this, e);
                }
            }
        }    public abstract class Observer 
        {
            private Subject sub;
            public Observer(Subject sub)
            {
                this.sub = sub;
                this.sub.subEvent += new SubEventHandler(ObResult);
            }        public abstract void ObResult(object sender, EventArgs e);
        }    class Cat:Subject
        {
            public void Scream()
            {
                Console.WriteLine("猫叫~~");
                OnAction(EventArgs.Empty);
            }
        }    class Mouse : Observer
        {
            public Mouse(Subject sub)
                : base(sub)
            {        }        public override void ObResult(object sender, EventArgs e)
            {
                Console.WriteLine("老鼠吓跑了~");
            }
        }    class Master : Observer
        {
            public Master(Subject sub)
                : base(sub)
            {        }
            public override void ObResult(object sender, EventArgs e)
            {
                Console.WriteLine("主人醒了~");
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Cat cat = new Cat();
                Mouse[] mouses = new Mouse[3];
                for (int i = 0; i < mouses.Length; i++)
                {
                    mouses[i] = new Mouse(cat);
                }
                Master master = new Master(cat);
                cat.Scream();
                Console.ReadKey();
            }
        }
    }