“继承”与"多态"的一些疑点

本文探讨了C#中的继承机制,包括构造函数的调用顺序和成员隐藏与虚方法覆写的区别。通过示例代码说明了这些概念的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    都知道,继承机制可以提高代码的可复用性和可扩展性,提高软件效率。多态是由于基类的引用调用在派生类中实现的方法,不同的派生类将产生不同的调用结果。

在C#的规则中,继承机制很强大,可以从一个类或多个接口中继承,也可以传递继承,但不能从多个类中继承。子类可以共用父类的所有非私有成员。注意1.:构造函数和析构函数是不能被继承的。除此以外的成员都可以被继承。2.密封类sealed不是被继承

  而多态性质中,继承机制是实现多态的基础。C#中每种类型都是多态的,因为任何类型都从Object类型派生。多态性分为两种,一种是编译时的多态性,表现为在同一个类中的方法的重载(方法的参数信息不同)。第二个是运行时的多态性,表现形式为虚方法的覆写,是真正的利用到继承机制。在基类中设置一个虚方法,留给基类的派生类去覆写它。虚方法就是可以在派生类中对其实现进一步改进的方法。注意:静态成员函数,构造函数不能是虚方法。

  

  以上都是我对继承机制概念的掌握,但所掌握的知识中思考越多,头脑中的疑点也越多,我便提出我的疑点和我思考后得出的结论吧。

  疑点一:当派生类类被调用构造函数时,基类与派生类的初始化执行顺序是怎样?

  答: 1.初始化类的实例字段
          2.调用基类的构造函数
          3.调用类自己的构造函数

           eg  void main()

                {

                     Student student=new Student();

                }

                class Person

              {

                       string Name;

                        int Age;

             public Person (string name,int age)    //重载函数
                  {
                  Name=name;
                  Age =age ;
                  Console.WriteLine("{0},{1}",Name,Age );
                  }

              }

                 class Student:Person

                  {

                         string School;

                           public Student(string name, int age, string school)
                          :base(name,age)          //在派生类中指定基类构造函数,根据参数信息调用基类的构造函数,去掉为默认的无参数构造函数
        {                           
            //还可以使用this来构造函数,其格式为:this(),其先根据参数调用当前类的构造函数的基类构造函数,后调用该构造函数,最后调用this自己的构造函数

             School = school;       
            Console.WriteLine("{0},{1},{2},{3}",this.Name ,base .Name , Age ,School);
 
        }

                   }

疑点二:用new隐藏基类成员与虚方法的覆写的区别

      在我没有真正理解隐藏和覆写这两个概念时,我一直在怀疑虚方法的用处何在,既然虚方法覆写的目的是为了在派生类中进一步改变基类的方法,我用new改进我要修改的值不是也可以?当然可以,但隐藏毕竟是隐藏,并没有实质性的改写,因此我在Person person=new student时,得出的person.name是基类的值,而不是派生类的值,并不是的到我们想要的值 。而通过虚方法覆写,是真正的修改了基类方法的值,在运行时已经修改,因此两者是有本质上的区别。两种方法的对象也不尽相同,new 可以针对的是基类的各个可继承的成员,包括方法。而虚方法只是针对的是基类的可继承某个方法。没错,他们的相同点都是必须以继承为基础

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值