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重写的方法却被覆盖,从而改变了(多态)

  • 相关阅读:
    差分约束
    POJ 2449 Remmarguts' Date[k短路]
    K短路
    hdu4034 Graph(floyd)
    hdu2089不要62(数位dp)
    POJ3468 A Simple Problem with Integers ( 线段树)
    POJ3255:Roadblocks(次短路 SPFA+A星)
    usaco2.1Ordered Fractions( 枚举, 数学)
    hdu1565方格取数(1) (状态压缩dp)
    poj3259 Wormholes(spfa)
  • 原文地址:https://www.cnblogs.com/dunitian/p/5206954.html
Copyright © 2011-2022 走看看