C#基础 13 抽象abstract 与接口 interface

关键字:

使用abstract关键字可以创建不完整且必须在派生类中实现的类和类的成员

抽象类

  1. 抽象类是特殊的类,只是不能被实例化;除此以外具有类的其他特性;
  2. 重要的是抽象类可以包括抽象方法,这是普通类所不能的;
  3. 抽象类中也可以编写非抽象方法;
  4. 抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖。
  5. 抽象父类申请成对象,不能构造成父类使用,只能构造子类来使用。
  6. 抽象类中可以包含构造方法,但是构造方法不能被声明为抽象;
  7. 抽象类不能被密封或者静态。

抽象方法

1、抽象方法只能声明于抽象类中且不能包含任何实现,抽象方法只能由子类继承并实现才能使用,且子类必须实现它;

2、子类中覆写的抽象方法必须和父类的抽象方法要一一对应(返回类型、参数要一样);

3、在抽象类中抽象方法不提供方法体。     (1.2.3示例代码如下)

    abstract class C1  //抽象类    父类
    {
        public abstract void PP();         //抽象方法
    }
-------------------------------------------------------------------------------------------
    abstract class C2: C1      //子类
    {
        public override abstract void PP();   //继承抽象方法
    }
-------------------------------------------------------------------------------------------
    class C3: C2              //子类的子类
    {
        public override void PP()          //继承方法     
        {
            Console.WriteLine(15);
        } 
    } 
-------------------------------------------------------------------------------------------
    class Program
    {
        static void Main(string[] args)
        {
            C3 c3 = new C3();        声明创建c3  
            c3.PP();                 用c3将pp调用出来
            Console.ReadKey();
        }
    }

4、声明抽象方法时,不能使用virtual、static、private、sealed修饰符;

接口interface  关键字: interface

1.interface解决了类不能多重继承的问题;

2.接口起到约束作用,便于更好地管理代码,避免遗漏;

3.接口是一种规范/协议;

注意+代码:

子类可以有且只有一个父类,但可以继承多个接口(“,”隔开)。(interface1,interface2是接口)

class Lei2: Lei1, Interface1, Interface2      
{
   类主体
}

接口可以包含属性、方法、事件、索引器,不能包含常量、字段、构造函数、析构函数、静态成员,不能进行运算符重载。

接口中所有成员默认公开,不能有修饰符。

接口里方法不能用访问修饰符,无方法体,以“;”结束。

interface Interface1
    {
        void FFF();               //没有修饰符  没有方法体   以;结束
    }

接口不能直接实例化使用。

类、结构、接口,都可以多重继承接口。

抽象父类继承接口,可能实现接口方法,也可以转换成抽象,如果类同时继承类和接口,要把类写在前面,接口写在后面,类名和接口名之间用“,”隔开。接口没有先后顺序。

可以修改成一下代码所示:

        abstract public void FFF();       转化抽象  公开

//或者 


         public void FFF()            加公开、方法体
            {

            }

类一旦继承接口,必须实现接口的所有成员,接口1继承接口2,接口1不用实现接口2的方法。

接口与抽象类的共同点和区别

共同点: 

1.都可以被继承

2.都不能被直接实例化

3.都可以包含方法声明,都没有方法体

4.派生类必须实现为实现的方法(没有方法体的方法)

区别:

1.抽象类可以定义字段、属性、方法实现等;接口只能定义属性、索引器、事件和方法声明,不能包含字段等。

2.抽象类是一个不完整的类,需要进一步细化;而接口是一个行为规范。

3.接口能继承多个,抽象类只能继承一个。

4.抽象类只需要派生类实现抽象方法,但是接口要求必须实现它的所有成员。


    interface Interface1             //接口1
    {
        string S                     //属性
        {
            get;
            set;
        }
        int Function(int a, int b);   //方法
    }
    interface Interface2           //接口2
    {
        void Function();           //接口里的方法
    }
   interface Interface3                //接口3
    {
        void Function3();              //接口3的方法
    }
    abstract class Class1: Interface3            //抽象类class1继承接口3
    {
      public abstract void Function3();          //将抽象3中的方法转化为抽象方法
    }
    class Game: Class1,Interface1, Interface2    //类Game继承父类Class1,接口1,2
    {
        public string S                          //实现接口1中的属性s
        {
            get;
            set;
        }
        public int Function1(int a, int b)        //实现接口1中的方法
        {
            int c = a + b;
            return c;
        }
        public void Function2()                   //实现接口2中的方法
        {
            Console.WriteLine("Function2");
        }
        public override void Function3()          //实现接口3中的方法   因为Class1继承了接口3
        {
            Console.WriteLine("Function3");       //Game继承了Class1
        }
    }

 

    class Program
    {        
        static void Main(string[] args)            //主方法输出
        {
            Game game = new Game();

            game.S = "OK";
            Console.WriteLine(game.S);
            Console.WriteLine(game.Function1(5, 6));
            game.Function2();
            game.Function3();
            Console.ReadKey();
        }
    }
--->
OK
11
Function2
Function3

 

参考老师:https://blog.csdn.net/NCZ9_/article/details/83899764

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值