问答详情
源自:2-7 接口

有两个问题:1、既然接口方法已经在类Cat中实现了,那么直接通过对象调用 c.catchmice();不就可以实现抓老鼠的功能了吗?为什么还要把猫C强制转换成接口类型?2、既然接口方法必须在类中实现,哪和直接在类中定义方法有什么区别?例如,如果狗爬树也调用ClimbTree接口的话,是不是还得在狗的类里面再写一次爬树接口的函数体吗?

    public class Cat : Pet,ICatchMice,IClimbTree

    {

        public Cat(string name):base(name)  //构造函数

        {

 

        }

        public override void Speak()  //override 重写

        {

            Console.WriteLine(_name + " is speaking:" + "喵喵");

        }


       public void catchmice()  //实现接口成员,既要声明且加上public 又要加上函数体

       {

            Console.WriteLine(_name + " had caught a mice!");

        }


        public void climbtree()

        {

           Console.WriteLine(_name + " is climbing a big tree!");

        }


    }


 class Program

    {

        static void Main(string[] args)

        {

            //用基类类型的引用,可以方便不同子类的统一管理 ,例如利用一个容器(数组)保存所有的子类

            Pet[] pets = new Pet[] { new Dog("喵喵"),new Cat("汪汪"),new Taidi("小三") };

            for (int i=0;i<pets.Length;++i)

            {

                pets[i].Speak();

            }


            Cat c = new Cat("Tom");

            //ICatchMice catchM = (ICatchMice)c;

            //catchM.catchmice();

            c.catchmice();

            c.climbtree();

            Console.ReadLine();



        }

    }



提问者:慕姐3146705 2018-05-19 15:06

个回答

  • 乌薪王
    2018-10-29 22:29:39

    强制转换属于显示接口,而一般用隐式接口

    当类实现多个接口时,并且接口中包含相同的方法签名,可以标识出哪个方法属于哪个接口


  • Dawn_Spacetime
    2018-08-15 11:11:12

    可以去看看Gof的书。。。

  • xms_dqq
    2018-07-11 10:21:49

    就是为了降低耦合度,提高你代码的扩展性,这就是为什么采用接口。

    把猫C强制转换成接口类型的优点是让你的代码提高了扩展性啊,你可以是猫,狗,蜥蜴等等。如果你用Cat,那你只能是猫了。明白没。。。

    如果想让狗爬树,可以调用Climbtree接口,是需要重写一次爬树函数的。

  • 慕粉1473954195
    2018-05-29 13:52:03

    \\△石'必忍\九d△/次◇情事_,o∨二心入启九o❤️丫条,\

  • qq_玄风之星_0
    2018-05-23 12:38:25

    面向对象的基本原则:依赖倒转原则,程序设计应该依赖抽象,而不依赖具体