美文网首页
16-02-接口

16-02-接口

作者: D丝学编程 | 来源:发表于2021-04-09 08:52 被阅读0次

    接口:是一种约定,本身不实现任何内容。(usb接口)

    接口:

    (1)接口不能被实例化。

    (2)接口中方法全部是抽象的。

    (3)接口的实现类(子类)必须要实现接口中所有的方法。

    (4)接口支持多继承(一个儿子多个爸爸)

    接口和抽象类的区别:

    抽象类 接口
    使用abstract关键字 使用interface关键字
    可以有普通方法和抽象方法 所有方法都是抽象的
    子类通过override实现抽象方法 子类直接实现所有成员

    问题:

    举例:音乐老师(既是老师,也是音乐家),需要有一种结构,音乐老师继承老师,同时继承音乐家。
    语文老师(既是老师,也是文学家),需要有一种结构,语文老师继承老师,同时继承文学家。

    解决:

      (1)首先,有老师类,然后有包含音乐家的行为的接口,然后有包含文学家行为的接口
    
      (2)音乐老师,继承老师,同时继承音乐家的接口
    
      (3)语文老师,继承老师,同时继承文学家的接口。
    

    接口相关语法示例

    //定义一个接口,使用关键字interface
    interface ISing 
    {
        //唱歌
        void Sing(); //接口中的方法会被隐式的指定为 public abstract。
    }
    
    //定义一个歌手类,继承ISing接口
    class Singer : ISing
    {   
        public void Sing() 
        {
            Console.WriteLine("我在演唱会现场演唱《曾经的你》");
        }   
    }
    
    //定义一个学生类,继承ISing接口
    class Student : ISing
    {
        public void Sing() 
        {
            System.out.println("我在寝室唱歌《分手快乐》");
        }
    }
    

    main方法的调用:

    Student stu = new Student();
    stu.Sing();
    
    Singer singer = new Singer();
    singer.Sing();
    

    利用接口实现多继承

    假设有4种动物,猫,狗,鸭,猴,我们需要规范其方法,和动物相关的方法有(1)吃东西,(2)游泳,(3)爬树。

    此时所有动物都会吃东西,但是猫和猴会爬树,不会游泳;狗和鸭会游泳,不会爬树,所以我们很难找到4种动物共同的父类解决所有的问题,此时可以定义接口来解决此问题。

    代码如下:

    //定义一个动物类,作为所有动物的父类,提供一个Eat()方法,给所有动物来继承。
    class Animal 
    {
        public void Eat()
        {
            Console.WriteLine("我在吃东西!");
        }   
    }
    
    //定义一个游泳的接口给狗和鸭来继承
    interface ISwim 
    {
        void Swim();
    }
    
    //定义一个爬树的接口给猫和猴来继承
    interface IClimbTree 
    {
        void ClimbTree();
    }
    
    //定义一个猫类继承自动物类和IClimbTree爬树接口
    class Cat : Animal,IClimbTree
    {
        public void ClimbTree() 
        {
            Console.WriteLine("我用尖锐的爪子在爬树");
        }
    }
    
    //定义一个猴类继承自动物类和IClimbTree爬树接口
    class Monkey : Animal,IClimbTree
    {
        public void ClimbTree() 
        {
            Console.WriteLine("我用我四肢的力量在爬树");
        }
    }
    
    //定义一个狗类继承自动物类和ISwim游泳接口
    class Dog : Animal,ISwim
    {
        public void Swim() 
        {
            Console.WriteLine("我用狗刨式游泳");
        }
    }
    
    //定义一个鸭类继承自动物类和ISwim游泳接口
    class Duck : Animal,ISwim
    {
        public void Swim() 
        {
            Console.WriteLine("我用鸭掌在游泳");
        }
    }
    

    main方法调用:

    Dog dog = new Dog();
    dog.Swim();
    
    Cat cat = new Cat();
    cat.ClimbTree();
    
    Duck duck = new Duck();
    duck.Swim();
    
    Monkey monkey = new Monkey();
    monkey.ClimbTree();
    

    通过main方法的调用语法,我们可以看到,在系统中,只要会爬树的动物,调用爬树方法统一使用ClimbTree()方法,只要会游泳的动物,调用游泳方法统一使用Swim()方法。实现了代码的规范化。

    相关文章

      网友评论

          本文标题:16-02-接口

          本文链接:https://www.haomeiwen.com/subject/guzlxltx.html