当前位置:   article > 正文

C#方法的重载 重写 覆盖_c# 子类覆盖父类属性

c# 子类覆盖父类属性
1.方法的重载一般发生在类内部,同样的方法名,有不同的参数与返回类型,
2.方法的重写发生在子类对于父类抽象方法/虚方法的重写,重写的方法都有前缀override,父类一旦包含抽象方法,必然为抽象类,包含虚方法可以为普通类,当然静态类中也可以有有普通的方法.方法的重写一般会碰到实例化调用方法的问题.

例如:当子类Son重写(override)了父类的hit()方法时

(1)
Parent p=new Parent();

p.hit(); 执行父类方法

(2)
Parent p=new Son();

p.hit(); 执行子类方法

(3)
Son s=new Son();

s.hit(); 执行子类方法

(4)
Son s=new Parent(); 注意此种情况是不存在的 不可能通过new父类返回一个子类

s.hit();无效

对比 (2)(4)两种情况我们分析下
new son()可以被降级为Parent的实例这个很好理解 因为Son基于继承关系中肯定有所有Parent中的方法,这也很好的解释(4)为何不存在,因为new Parent()产生的实例未必会包含子类自己扩展出的方法,所以写法违法.
3.对于(2)中执行子类的方法 则可以对比重写与覆盖的区别
子类对父类方法的重写(override)当Parent的实例是通过new Son()产生时,会第一时间去子类中找对应的方法,如果此方法在父类中是个虚方法,则子类可能没有重写,在子类中找不到时才会去父类中寻找.

例如:当子类Son覆盖(new)了父类的hit()方法时

(1)
Parent p=new Parent();

p.hit(); 执行父类方法

(2)
Parent p=new Son();

p.hit(); 执行父类方法

(3)
Son s=new Son();

s.hit(); 执行子类方法

(4)
Son s=new Parent(); 注意此种情况是不存在的 不可能通过new父类返回一个子类

s.hit();无效

回顾下构造函数的子父类的执行关系:
public class Parent
{
    private void Start()
    {
    }

    private void Update()
    {
    }

    public Parent()
    {
        Test();
    }

    protected virtual void Test()
    {
        Debug.Log("父类Test方法");
    }
}

public class Son : Parent
{
    private void Start()
    {
    }

    private void Update()
    {
    }


    protected override void Test()
    {
        Debug.Log("子类Test方法");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
当在其他脚本中执行Son son=new Son();在构造Son时会先执行父类的构造函数,父类的构造函数中又执行了Test方法,由于子类Son已经重写Test方法,所以父类构造函数中执行的Test方法是子类中重写的方法,因此这里会打印"子类Test方法".
子类对父类方法的覆盖(new) 当Parent的实例是通过new Son()产生时,我们应该明白调用方法的实例依旧是parent,此时son中通过new 对Hit方法进行了覆盖操作,实际的意义可以理解为两个类中的两个独立方法,非要说有关系,那就是名字差不多的,一个有new ,一个没有new,所以(2)会执行父类的方法.
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/366870
推荐阅读
相关标签
  

闽ICP备14008679号