zoukankan      html  css  js  c++  java
  • c#基础学习(0806)之接口学习

    首先了解一下什么是接口:

    1、接口就是一种规范,协议,约定好遵守某种规范就可以写通用的代码

    2、定义了一组具有各种功能的方法(只是一种能力,没有具体实现,像抽象方法一样,“关说不做”)

    接口存在的意义:多态。

    1、多态的意义:程序可扩展性,最终让程序变得更灵活,节省成本,提高效率

    2、接口解决了类的多继承问题,同时解决了类继承以后体积庞大的问题

    3、从语法的角度来看,接口与抽象类类似

    接口的特点总结:

    1、接口是一种规范,为了实现多态

    2、接口不能被实例化

    3、接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符默认为public,不能修改

    4、接口中的成员不能有任何实现(“关说不做”,只是定义了一组未实现的成员)

    5、接口中只能有方法、属性、索引器、事件,不能有字段

    6、接口与接口之间可以继承,并且可以多继承

    7、实现接口的子类必须实现该接口的全部成员

    8、一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须卸载IA的前面.class MyClass:A,IA{},因为类是单继承的

    9、当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract,(抽象类也能实现接口,用abstrac标记)

    10、“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)

    namespace 接口
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Console.WriteLine("Hello World!");
                IFlyable fly = new MyClass();
                fly.SayHi();
            }
        }
        //接口不能实例化
        //接口就是让子类来实现的
    
        //1.接口可以实现“多继承”(多实现),一个类只能继承自一个父类,但是可以实现多个接口。
        //2.接口解决了不同类型之间的多态问题,比如鱼和船不是同一类型,但是都能在水里“游泳”,只是方式不一样
    
        //定义一个接口,建议:一定要以大写I开头
        public interface IFlyable
        {
            //接口里面能包含什么成员,接口里面只能包含【方法】
            //方法、属性、索引器、事件==》方法
    
            //接口中的所有成员,都不能显示的写任何访问修饰符
            //默认是public的访问修饰符
            void SayHi();
            void M1(string msg);
            //在接口中这样写表示是一个未实现的属性
            string Name
            {
                get;
                set;
            }
            //索引器
            string this[int index]
            {
                get;
                set;
            }
        }
    
        //接口中的成员,子类必须实现
        public class MyClass : IFlyable
        {
            public string this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
    
            public string Name { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
    
            public void M1(string msg)
            {
                throw new NotImplementedException();
            }
    
            public void SayHi()
            {
                throw new NotImplementedException();
            }
        }
    }

    直接父类继承接口:

    namespace 接口练习3
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Console.WriteLine("Hello World!");
                Chinese cn = new Chinese();
                American am = new American();
                DengJi(cn);
                Console.ReadKey();
            }
    
            public static void DengJi(IShowInfo dengJiObj)
            {
                dengJiObj.Show();
            }
        }
    
        //定义一个接口
        public interface IShowInfo
        {
            void Show();
        }
    
        //直接父类继承接口
        public abstract class Person:IShowInfo
        {
            public string Name { get; set; }
            public string Age { get; set; }
            public string Email { get; set; }
            public abstract void Show();
        }
    
        class Chinese:Person
        {
            public override void Show()
            {
                Console.WriteLine("中国,8岁。。。");
            }
        }
        class American : Person
        {
            public override void Show()
            {
                Console.WriteLine("美国,18岁。。。");
            }
        }
        class German : Person
        {
            public override void Show()
            {
                Console.WriteLine("德国,28岁。。。");
            }
        }
    }
  • 相关阅读:
    008Spring & JPA & Hibernate & MySQL
    007Spring Security
    006Spring面向切面
    005运行时值注入
    004bean作用域
    003自动装配歧义性解决
    002Conditional条件化创建bean
    001profile条件化创建bean
    007API网关服务Zuul
    Sqlserver2008R2 如何使用bak备份文件还原数据库以及对应的失败解决方案
  • 原文地址:https://www.cnblogs.com/chao202426/p/9431691.html
Copyright © 2011-2022 走看看