zoukankan      html  css  js  c++  java
  • 类,子类,继承,virtual, abstract, override

    自己基本功不扎实,只好今天把类,子类,继承,virtual, abstract, override各种情况都试一下

    规则1:覆盖父类同名函数要用new, 重写则要用override
    相关代码:
    class a
    {
      public void aaa()
      {
      }
    }

    class b : a
    {
      public void aaa()
      {
      }
    }
    错误提示:“b.aaa()”上要求关键字 new,因为它隐藏了继承成员“a.aaa()”
    覆盖,重写区别:强制父项时,效果不一样:(a)bb.aaa();

    规则2:父项要virtual, abstract, override, 才能重写
    相关代码:
    class a
    {
      public void aaa()
      {
      }
    }

    class b : a
    {
      public override void aaa()
      {
      }
    }
    错误提示:“b.aaa()” : 无法重写继承成员“a.aaa()”,因为它未标记为 virtual、abstract 或 override

    规则3:virtual类型的要有实体
    相关代码:
    class a
    {
      public virtual void aaa();
    }

    class b : a
    {
      public override void aaa()
      {
      }
    }
    错误提示:“a.aaa()”必须声明主体,因为它未标记为 abstract 或 extern

    规则4:抽象方法只能在抽象类中
    class a
    {
      public abstract void aaa();
    }

    class b : a
    {
      public override void aaa()
      {
      }
    }
    错误提示:“a.aaa()”是抽象的,但它包含在非抽象类“a”中

    规则5:抽象方法不能声明主体
    abstract class a
    {
      public abstract void aaa()
      {
      }
    }

    class b : a
    {
      public override void aaa()
      {
      }
    }
    错误提示:“a.aaa()”无法声明主体,因为它被标记为 abstract

    规则6:重写的类一定是子类
    class a
    {
      public override void aaa()
      {
      }
    }

    class b : a
    {
      public override void aaa()
      {
      }
    }
    错误提示:“a.aaa()” : 没有找到适合的方法来重写

    规则7:virtual、abstract不能并用
    class a
    {
      public abstract virtual void aaa()
      {
      }
    }

    class b : a
    {
      public override void aaa()
      {
      }
    }
    错误提示:抽象方法“a.aaa()”不能标记为 virtual
    但override、abstract居然可以
    class a
    {
      public virtual void aaa()
      {
      }
    }

    abstract class b : a
    {
      public override abstract void aaa();
    }

    规则8:virtual、override不能并用
    class a
    {
      public virtual void aaa()
      {
      }
    }

    class b : a
    {
      public override virtual void aaa()
      {
      }
    }
    错误提示:标记为 override 的成员“b.aaa()”不能标记为 new 或 virtual

    规则9:override无法更改访问修饰符
    class a
    {
      public virtual void aaa()
      {
      }
    }

    class b : a
    {
      protected override void aaa()
      {
      }
    }
    错误提示:“b.aaa()” : 当重写“public”继承成员“a.aaa()”时,无法更改访问修饰符

    最后标准写法
    class a
    {
      public virtual void aaa()
      {
      }
    }

    class b : a
    {
      public override void aaa()
      {
      }
    }

  • 相关阅读:
    element-ui 表格实现单元格可编辑的示例
    vue.js数组追加合并与对象追加合并
    Gym 101471G BZOJ 4954 [WF2017]Replicate Replicate Rfplicbte
    Gym 100299E BZOJ 4054 [CERC2013]Escape (启发式合并)
    Gym 101239E BZOJ 4110 [CERC2013]Evolution in Parallel (DP、结论)
    Gym 101221I BZOJ 4080 [WF2014]Sensor Network (二分图匹配)
    Gym 101190D BZOJ 4842 Luogu P6967 LOJ #6071 [NEERC2016]Delight for a Cat (费用流)
    记录一次dubbo不能正常抛出特定异常
    JAVA 类加载机制学习笔记
    JAVA 垃圾回收读书笔记
  • 原文地址:https://www.cnblogs.com/yzx99/p/1369948.html
Copyright © 2011-2022 走看看