zoukankan      html  css  js  c++  java
  • 关于C#重写,隐藏的一些事

    第一次开始写技术博客,不知该从何处下手,本人算是菜鸟一枚,每每看到博客园里面的大牛们分享的技术文章,只能望其项背,高不可攀。但细细想来,若不尝试着从小处从低处慢慢去积累分享,想要成为技术大牛也只能沦为泡影。所以,just do it。

    c#面试过程中重写(override),隐藏(new)之间的区别算是经常被问到,下面将举个栗子来演示一下。

     1、新建一个Person类,里面有个Say()方法,用virtual修饰可被子类重写或隐藏。

    2、再建一个Teacher类继承于Person类,重写(override)Say()方法。

    3、再建一个Student类继承于Person类,隐藏(new)Say()方法。

         

    4、我们在Main方法中进行调用

    执行结果如下:

               

    分析:

          1、实例化一个Person对象person,第一次调用Say()时,调用的是自身的say(),输出: I am a Person;

          2、实例化一个Teacher对象teacher,由于Teacher类重写(override)父类Person中的Say()方法,执行的是重写之后的Say(),所以输出:I am a teacher;

          3、实例化一个Student对象student,执行的后输出:I am a student;

          4、当person指向一个Teacher实例时,编译时person调用Say()实则运行时调用的是重写之后的Say();

               而当person指向一个Student实例时,编译时person调用Say(),运行时调用的是自身的Say();说明Student中的Say()是一个全新的方法,对Person对象隐藏,Person对象只能访问自己的Say()。

    总结:

          1、子类通过New关键字修饰的方法将对分类隐藏,是子类一个全新的方法,父类将不能调用;

          2、子类重写父类中的方法,子类和父类调用的都将是子类override修饰的方法。

     

  • 相关阅读:
    踩踩踩
    c语言可变参
    C++开发者都应该使用的10个C++11特性
    c++11 条件变量 生产者-消费者 并发线程
    c++11 线程
    C++ 虚函数表解析 继承
    坐标系
    C++ 容器:顺序性容器、关联式容器和容器适配器
    全面深入介绍C++字符串:string类
    做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk
  • 原文地址:https://www.cnblogs.com/ccnu0641/p/5259695.html
Copyright © 2011-2022 走看看