C#:抽象类和接口的理解和使用

前言:本篇讲我个人对抽象类和接口的理解,有不规范或者不全面的地方欢迎指出;

前面先对抽象类和接口做一个简单的描述和实际的应用,后续展开详细的讲解:

抽象类:抽象类表示一类物体的抽象,也就是将有相同特征的一类物体做了一个总结,比如动物是一个抽象类,要实现具体的动物,比如说猫,就可以继承动物这个抽象类,动物这个抽象类中可以包含动物名称、动物种类、动物习性,猫继承了动物这个抽象类就可以根据这些成员来具体自己的特征;以上就是抽象类的理解;
简单点说:

抽象类和子类是一种is a是一种】的关系;

接口:定义了一种行为,举个例子:比如说现在要买东西,定义了一种买的接口,当继承过来之后就要实现这个买东西的接口,但是具体要买什么东西,就要在实现类中具体实现。
简单点说:

接口和实现类是一种Can do能够做】的关系

抽象类的实现:

public abstract class AnimalAbsrtract:MonoBehaviour  //继承的MonoBehaviour不懂的不用管,对程序没有影响
{
    
    													
    public abstract string name {
    
     get; set; }       //定义了一种动物的抽象类,包括了动物的名称、 种类、习性三个属性
    public abstract string kind {
    
     get; set; }
    public abstract string habit {
    
     get; set; }

    public abstract void DescribeSelf();           //定义了一个自我介绍的抽象方法
}

//上面定义了一个抽象类
//下面的类继承了这个抽象类并加以了实现
public class InterfaceAndAbstract : AnimalAbsrtract
{
    
    
    public override string name {
    
     get; set; }
    public override string kind {
    
     get;  set; }
    public override string habit {
    
     get; set; }

    public override void DescribeSelf()			//对抽象类的实现,通过抽象类,现在定义了一个猫的动物类
    {
    
    
        name = "猫";
        kind = "猫科类";
        habit = "逮老鼠";
        Debug.Log("当前动物"+ "\r\n"+"名称:"  + name+"\r\n"+"种类:"+kind+ "\r\n" + "习性:"+habit);
    }

    private void Start()					//Unity中的方法,不懂的不需要了解,只要知道它会在程序开始时执行就行
    {
    
    
        DescribeSelf();
    }
}

运行结果:

当前动物
名称:猫
种类:猫科类
习性:逮老鼠

抽象类扩展:

  • 语法
  1. 用abstract修饰
  2. 抽象类可以包含普通类中可以包含的成员,并可以像普通类一样正常使用;也可以包含抽象成员,但是抽象成员只能在子类中实现;除抽象的成员外,其他定义的成员和普通类无异:全局变量和方法可以在子类中调用等…
  3. 抽象类不能被实例化,因为抽象类中可以包含抽象成员,但是抽象成员在抽象类中只是声明,只能在子类中实现,没有具体的功能实现,所以不能被实例化。
  • 适用性:当碰到一类有共同特征的对象时,就可以声明抽象类作为父类,在子类中具体实现这些对象。

接口的实现:

interface IShopping												//定义了一种行为
{
    
    
    string shoppingName {
    
     get; set; }    						//包括商品名称和买几件的方法

    void shoppingCount();
}
//上面是定义了一个接口,包含一个属性和一个方法
//下面是在类中实现该接口
public class InterfaceAndAbstract : MonoBehaviour, IShopping
{
    
    
    public string shoppingName {
    
     get; set; }

    public void shoppingCount()									//类中实现了这个行为
    {
    
    
        shoppingName = "衣服";

        Debug.Log("我购买了100件:"+shoppingName);
    }
}

运行结果:

我要购买100:衣服

接口扩展:

  • 语法:
  1. 使用interface关键字
  2. 接口中可以包含属性、方法、事件;
  3. 接口和接口之间也可以相互继承,但是接口只能继承接口,一个接口可以继承多个接口;相应的,继承了这个接口的类,除了要实现这个接口中的成员之外,也要实现这个接口所继承的接口中的成员。
  4. 接口和它的成员都不能使用访问修饰符。
  5. 接口只声明,不实现;谁继承,谁实现。
  • 适用性:需要有某种功能的概念时可以使用接口。

结尾:有考虑不周全的地方希望大佬可以指出。

抽象类:抽象类不能实例化。 抽象类的用途是提供一个可供多个派生类共享的通用基类定义。 例如,类库可以定义一个抽象类,将其用作多个类库函数的参数,并要求使用该库的程序员通过创建派生类来提供自己的类实现。

接口:一组对外行为的规范;只关注行为,不关注数据,实现由子类完成。

猜你喜欢

转载自blog.csdn.net/u011229164/article/details/106825851