zoukankan      html  css  js  c++  java
  • new、override关键字

    1.如果我想彻底覆盖父类的方法,此时可以使用override

    .假有classB继承自classA,代码如下:

        public class B : A
        {
            public bool _flag;
            public B(bool flag)
            {
                _flag = flag;
            }
            protected override void Write()
            {
                Console.Write("Class B");
            }
            public override void SayHello()
            {
                if (_flag)
                {
                    base.SayHello();
                }
                else
                {
                    this.Write();
                }
            }
        }
        public class A
        {
            protected virtual void Write()
            {
                Console.Write("Class A");
            }
            public virtual void SayHello()
            {
                this.Write();
            }
        }
    View Code

    这个时候实例化classB,打印输出:

    static void Main(string[] args)
    {
        B b = new B(false);
        //B b = new B(true);
        b.SayHello();
        Console.ReadKey();
    }
    View Code

    此时无论传入的flag值是true还是false执行的都是classA的Write()方法。这说明override会覆盖父类的同名方法,相当于被替代了。

    2.如果我不想覆盖父类的方法,他们井水不犯河水,可以使用new关键字,显式影藏父类的方法。代码如下

    new protected void Write()
    {
        Console.Write("Class B");
    }
    View Code

    这个时候当flag为true执行的是classA的write()方法;flag为false执行的是classB的方法。

  • 相关阅读:
    数组模拟队列实现
    Vue之模板语法
    初识Vue之helloworld
    二、Lambda表达式
    一、函数式编程
    SpringCloudAlibaba之Nacos
    SpringCloudAlibaba之Sentinel
    spring的随笔2
    spring的小想法1
    关于hibernate的一些看法
  • 原文地址:https://www.cnblogs.com/coce/p/7103495.html
Copyright © 2011-2022 走看看