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的方法。

  • 相关阅读:
    oracle 动态SQL
    Oracle 学习PL/SQL
    SQL优化原理
    JAVA环境配置
    Java接口
    Java数据类型、操作符、表达式
    C#-VS配置开发环境-摘
    Java版本
    网站构建
    Java 时间、字符串
  • 原文地址:https://www.cnblogs.com/coce/p/7103495.html
Copyright © 2011-2022 走看看