zoukankan      html  css  js  c++  java
  • 扩:new and override

    昨天有个网友问我继承里面的new和override关键词有啥区别,呃,我们来看个例子就知道了

    new ==》隐藏父类同名方法  override==》覆盖

    定义一个父类:

        public class People
        {
            /// <summary>
            ///ushort参考: https://msdn.microsoft.com/zh-CN/library/cbf1574z.aspx
            /// </summary>
            public string Name { get; set; }
            public ushort Age { get; set; }
    
            public People(string name, ushort age)
            {
                this.Name = name;
                this.Age = age;
            }
            public void Hi()//People
            {
                Console.WriteLine("Name: " + this.Name + " Age: " + this.Age);
            }
            public virtual void Show()//People
            {
                Console.WriteLine("Name: " + this.Name + " Age: " + this.Age);
            }
        }
    

      定义一个子类:

        public class Student : People
        {
            #region 属性
            /// <summary>
            /// 学校
            /// </summary>
            public string School { get; set; }
            /// <summary>
            /// 班级
            /// </summary>
            public string StrClass { get; set; }
            /// <summary>
            /// 学号
            /// </summary>
            public string StrNum { get; set; }
            #endregion
    
            #region 构造函数
            /// <summary>
            /// 调用父类构造函数
            /// </summary>
            /// <param name="name"></param>
            /// <param name="age"></param>
            public Student(string name, ushort age) : base(name, age)
            {
    
            }
            public Student(string name, ushort age, string school, string strClass, string strNum) : this(name, age)
            {
                this.School = school;
                this.StrClass = strClass;
                this.StrNum = strNum;
            } 
            #endregion
    
            /// <summary>
            /// new-隐藏
            /// </summary>
            public new void Hi()//Student
            {
                Console.WriteLine("Name: " + this.Name + " Age: " + this.Age + " School: " + this.School + " strClass: " + this.StrClass + " strNum: " + this.StrNum);
            }
            /// <summary>
            /// override-覆盖
            /// </summary>
            public override void Show()//Student
            {
                Console.WriteLine("Name: " + this.Name + " Age: " + this.Age + " School: " + this.School + " strClass: " + this.StrClass + " strNum: " + this.StrNum);
            }
        }
    

      调用一下

    static void Main(string[] args)
            {
                People p = new Student("app", 10, "北京大学", "001", "01001");
                p.Hi(); p.Show();
    
                System.Console.WriteLine();
    
                Student s = p as Student;
                s.Hi(); s.Show();
    
                System.Console.ReadKey();
            }
    

      输出:

    可以发现,用new修饰的方法,其父方法并没有被改变,只是被隐藏了

    用override重写的方法却被覆盖,从而改变了(多态)

  • 相关阅读:
    关于shell输出的一些问题
    python一些问题
    excel
    梁先生家书摘录
    使用conda安装requirement.txt指定的依赖包
    Matplotlib 的默认颜色 以及 使用调色盘调整颜色
    各种 Shell 的使用
    将实验数据保存到txt文件中
    机器学习-学习资源
    Gvim 的使用
  • 原文地址:https://www.cnblogs.com/dunitian/p/5206954.html
Copyright © 2011-2022 走看看