首页 > 代码库 > 抽象和接口

抽象和接口

继承:
访问修饰符  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 "听音乐";
        }


        生成成功

抽象和接口