C# 类的继承

定义一个类A, 然后定义一个类B继承自类A,此时A为父类(基类),B为子类(派生类)。

称B继承自A,A派生出B。

此时B继承 A的非私有部分。对于A的私有部分,是不能被继承的。

A的构造函数:

 public A(string n)
        {
            name = n;
        }

B的构造函数:

  public B(string name)
            : base(name)
        { 
        
        }

通过base(name)将构造函数B获取的内容传递给A的构造函数。


子类存在和父类一样的函数时,子类会调用子类自己的函数。


多态:

对于类A和B。可以定义一个父类A的引用指向B类的对象。但是不能定义子类B的引用指向父类A的对象,这样做在运行时会抛出异常。

类A派生出类C,C也是A的一个子类。B和C的引用不能相互指向对方,这样做语法上就是错误的。

基类引用指向派生类对象是,父类引用只能调用子类继承自父类的成员。对于子类定义的成员,不能被调用。可以调用子类重写父类的方法,而不是父类的方法。

派生类存在和父类一样的函数时,派生类的引用调用派生类的成员函数。

基类的引用指向派生类时,调用基类自己的成员函数。如果想让基类y引用调用派生类的成员,需要把基类的函数声明为虚函数virtual,说明该函数可以在子类中被重写,此时,派生类的该函数加override,这样可以就是子类重写了父类的函数,基类指针调用时,调用的就是子类的函数。如果没有加override,默认就是覆盖的。

注意事项:

virtual和override不能用在private方法上。

重写的方法必须同名,参数列表一致,返回值类型一致。

拥有相同的访问级别。

· 只能重写虚方法。

已经用override定义的方法,不能再用virtual定义,原因是因为加了override,是重写父类的函数,同时也将父类的虚函数特性继承过来了,所以子类B继续派生子类C时,C还可以对B重写过的函数进行重写,如果子类B不加override,相当于重新定义(覆盖),此时C不能重写B的该函数,除非B的该函数加virtual。

对于父类的虚函数,子类定义有相同函数时,默认为隐式加new(重新定义,覆盖),如果加了override,就是重写。


protected:保护成员属性。不能再类的外部被访问,但是可以在子类内部访问。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值