【从Java转C#】第四章:继承

本文详细介绍了C#中的继承概念,包括单一继承、多态、虚方法、隐藏方法、抽象类和接口。同时,讲解了如何实现接口以及接口在类继承中的作用。还探讨了构造函数、访问修饰符以及密封类和方法的重要性。通过实例展示了如何在实际编程中应用这些概念。
摘要由CSDN通过智能技术生成

欢迎关注我的公众号“爱敲代码的小黄”,一起努力,一起学习!

继承

继承的类型

  • 实现继承和接口继承
    • 实现继承:表示一个类型派生与一个基类型,拥有该基类型的所有成员字段和函数
    • 接口继承:表示一个类型只继承了函数的签名,没有继承任何代码
  • 多重继承
    • 一个类派生自多个类

实现继承

  • 实现简单的继承

    class student
        {
            public int age;
            public string name;
        }
    
        interface student1
        {
            void test();
        }
        class teacher : student, student1
        {
            public void test()
            {
                Console.WriteLine("我是实现的接口");
            }
        }
    
  • 虚方法

    • 把一个基类函数声明为 virtual ,就可以在任何派生类中重写该函数
      class student
        {
            public int age;
            public string name;
    
            public virtual  void test()
            {
    
            }
        }
         class teacher : student
        {
            public override  void test()
            {
    
            }
        }
    
  • 隐藏方法【不建议使用】

    • 如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为 virtual 和 override,派生类方法都会隐藏基类方法

      class student
          {
              public int age;
              public string name;
      
              public void test()
              {
      
              }
          }
          class teacher : student
          {
              public new void test()
              {
      
              }
          }
      
  • 调用函数的基类版本【base】

     class student
        {
            public int age;
            public string name;
    
            public void test()
            {
    
            }
        }
        class teacher : student
        {
            public new void test()
            {
                base.age = 1;
            }
        }
    
  • 抽象类和抽象函数【abstract】

    • 抽象类不能实例化,抽象函数不能直接实现,必须在非抽象的派生类中重写

    • 如果类包含抽象函数,则该类也是抽象的,也必须声明为抽象的

      abstract class student
          {
              public int age;
              public string name;
      
              public abstract void test();
          }
          class Teacher : student
          {
              public override void test()
              {
              }
          }
      
  • 密封类和密封方法【sealed】

    • 对于类来说,表示不能继承
    • 对于方法来说,表示不能重写
  • 派生类的构造函数

    • 和Java差不多,先实例化父类再实例化子类
    • C#中是不包含静态代码块和代码块的
  • 修饰符

    修饰符应用于说明
    public所有类型或成员所有代码均可以访问该项
    protected类型和内嵌类型的所有成员只有派生的类型能访问该项
    internal所有类型或成员只能在包含它的程序集中访问该项
    private类型和内嵌类型的所有成员只能在它所属的类型中访问该项
    protected internal类型和内嵌类型的所有成员只能在包含它的程序集中和派生类型的任何代码中访问该项

接口

 interface Istudent
    {
        void test();
    }

    class teach : Istudent
    {
        public void test()
        {
            
        }
    }
  • 接口不能有构造函数,也不能有字段
  • 接口定义中不允许声明关于成员的修饰符、接口成员总是公有的,不能声明为虚拟或者静态

定义和实现接口

  • 接口的名字通常以I开头
  • 如果一个类实现了接口,必须重写接口里面的方法
  • 如果一个接口A实现了接口B,类C实现了接口A,则类C需要重写接口A和接口B的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲代码的小黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值