zoukankan      html  css  js  c++  java
  • 抽象和接口

    继承:
    访问修饰符  class  类名 :类名
    
    一个类只能有一个父类(亲爹)
    
    父类  某个类继承自某个类
    子类  派生类   超类
    
    多态:
    类的多种形态
    
    父类存在虚方法   virtual
    子类重写         override
    
    访问修饰符:
    public      公共的,只要引用了命名空间就能用
                访问级别最高
    private     私有的,只能在类的内部进行访问
                访问级别最低
    
    internal    默认的,同一个命名空间下可以访问
                访问级别次最高
                
    protected    被保护的,类的内部及它的子类中才可以访问
                访问级别次最低
    
    -----------------------------------------------------------
    抽象类:abstract 
    就是用来当亲爹的,不能被实例化对象
    
    抽象方法只能存在于抽象类中
    抽象类中不一定只有抽象方法,还可以有普通方法(普通方法可以虚写)
    
    
    1.创建HuoZhe类
    namespace 抽象类和接口
    {
        public abstract class HuoZhe     // 写上;public abstract , abstract:摘要
        {
            写一个string类型的方法,吃饭方法
            public string ChiFan() {    //return "大口吃饭";    //  返回的内容   }
    
    
            将其修改为抽象方法:abstract
            public abstract string ChiFan();   // 相当于已经声明完了
    
    
    
            抽象类里不仅有抽象方法,还有普通方法
            public virtual string HuXi() {
                return "鼻子和嘴呼吸";
            }
            
        }
    }
    2.创建Ren类
    namespace 抽象类和接口
    {
        class Ren:HuoZhe,GongZuo,YuLe   要想活着,需要继承活着的方法,吃饭方法,冒号是抽象类,逗号是接口
        {
            抽象方法,必须要把继承的方法在这写出来,否则报错
            然后对这个抽象方法ChiFan进行重写
            public override string ChiFan()
            {
                throw new NotImplementedException();  抛出一个新的异常,如果不改,一调这个方法,会抛出一个新的异常
                return "用嘴吃饭";   要的是返回一个string类型,在做HuoZhe
            }
    
            生成解决方案不成功
            Ren不实现GongZuo里的GongZuo1()方法是有错的
            所以在这需要把它实现出来
            接口里public 不用写override,直接写string类型的GongZuo1
            public string GongZuo1() {
                return "";
            }
    
    
            生成解决方案不成功
            Ren不实现YuLe里的YuLe()方法也是有错的
            所以在这需要把它实现出来
            接口里public 不用写override,直接写string类型的YuLe1
            public string YuLe1() {
                return "听音乐";
            }
    
    
            生成成功
        }
    }
    3.创建男人类
    namespace 抽象类和接口
    {
        class NanRen : Ren      //继承人这个类
        {
            public override string ChiFan()
            {
                //return base.ChiFan();返回父级的ChiFan方法
                return "大口吃饭";
            }
        }
    }
    4.创建女人类
    namespace 抽象类和接口
    {
        class NvRen:Ren    //继承人这个类
        {
    
            public override string HuXi()
            {
                return "就爱用鼻子呼吸";
            }
    
        }
    }
    
    
    -------------------------------------------------------------
    
    
    
    
    接口:interface   干爹
    不能被实例化对象 
    
    接口中只能存在很抽象的方法
    string 方法名();
    
    接口中所有的内容都一定是public
    
    
    
    
    5.创建工作类
    namespace 抽象类和接口
    {
        interface GongZuo
        {
            //可以添加类的时候把class 改为 interface,也可以直接点击添加类,然后改成接口,也是.cs后缀
            //接口是很抽象的,抽象到不允许有私有的,都是公开的
            //连访问修饰符都不用写
            //直接写方法和返回类型
            string GongZuo1();   //这样就声明了方法
        }
    }
    6.创建娱乐类
    namespace 抽象类和接口
    {
        interface YuLe
        {
            string YuLe1();
        }
    }
    
    还有创建的Ren 类里的内容:
    
    生成解决方案不成功
            Ren不实现GongZuo里的GongZuo1()方法是有错的
            所以在这需要把它实现出来
            接口里public 不用写override,直接写string类型的GongZuo1
            public string GongZuo1() {
                return "";
            }
    
    
            生成解决方案不成功
            Ren不实现YuLe里的YuLe()方法也是有错的
            所以在这需要把它实现出来
            接口里public 不用写override,直接写string类型的YuLe1
            public string YuLe1() {
                return "听音乐";
            }
    
    
            生成成功

  • 相关阅读:
    SQL Server 判断各种对象是否存在和sysobjects的关系
    SQL Server 通过“with as”方法查询树型结构
    js Iframe与父级页面通信及IE9-兼容性
    SQL Server Update 链接修改和when的应用
    C# 使用表达式树获取特性的值
    .Net Core 防止跨站点请求伪造
    SQL Server 待定
    C# Http请求
    C# Linq 笛卡尔积
    SQL Server 存储过程、函数、触发器的定义
  • 原文地址:https://www.cnblogs.com/yunpeng521/p/7101277.html
Copyright © 2011-2022 走看看