首页 > 代码库 > 面向对象 【抽象类】【借口】

面向对象 【抽象类】【借口】

一、抽象类

abstract     抽象

override    重写

父集:  abstract 抽象类,抽象方法

子集: override 改写

它就是出来当亲爹的,只为继承而出现不能被实例化成对象

一般抽象类中只放置抽象方法,只规定了返回类型和参数,不定义具体的内容

抽象类可以包含抽象方法普通方法,抽象方法一定在抽象类中,抽象类中不一定只有抽象方法                                                      

如果要调用抽象类中的普通方法,那么需要子类继承之后实例化再调用

当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法。

sealedabstract 关键字不能同时出现

 案例

技术分享
namespace ConsoleApplication1
{
    public abstract class Ren
    {
        public abstract string ChiFan();      

    }
}
——————————————————

namespace ConsoleApplication1
{
     public  class Woman : Ren
    {
        public override string ChiFan()
        {
            return "细嚼慢咽";        ——子类,父类 方法名称要一样
        }
    }
}

———————————————————
namespace ConsoleApplication1
{
    public class Man : Ren
    {
        public override string ChiFan()
        {
            return "大口吃饭";
        }     

    }
}
View Code

 —— 子类、父类 方法名一致

 —— 父类中的抽象方法子类中必须要重写

 

 

二、接口

interface 

可以将程序拆分成多个模块,定义子类必须实现的功能

它就是出来当干爹的,不能被实例化成对象,接口里面不能有实际的方法

类:一定用 public 修饰符, 用 interface 代替类个关键字 class 

方法:不能包含普通方法,不用 public, 直接【 数据类型 函数名 ();  

子类:不需要override关键字,

      :父集中的方法都有重写

 案例

技术分享
namespace ConsoleApplication1
{
    public interface YuLe
    {
        string AiHao();
    }
}
————————————————

namespace ConsoleApplication1
{
    public interface GongZuo
    {
        string JiNeng();
    }
}
————————————————

namespace ConsoleApplication1
{
    public class Man : Ren, GongZuo, YuLe
    {
        public override string ChiFan()
        {
            return "大口吃饭";
        }

        public string JiNeng()
        {
            return "敲代码";
        }

        public string AiHao()
        {
            return "打游戏";
        }

    }
}
View Code

—— 子类、父类 方法名一致

 —— 父类中的方法子类中都要重写

 

面向对象 【抽象类】【借口】