• 接口、抽象类、虚方法、重写、重载的关系


    1、重载

    重载就是在同一个类中,方法名相同,参数列表不同。参数列表不同包括:参数的个数不同,参数类型不同等。返回的数据类型可以不相同。代码如下:

    public class ClassA
    {
      public void Search()
      public string Search(int a)
      public int Search(string b)
    }

    也就是说,他们虽然名字相同,但是方法都是独立的,毫无关系的。

    2、重写就是子类重写父类的方法,父类声明一个虚方法,子类可以选择重写与否。如果重写,调用ClassB中的search方法就是调用子类重写过的方法,也就是ClassB的方法。如果不重写,调用ClassC中的search方法就是调用继承的父类中的方法,也就是ClassC中的方法。这种非抽象类的方法重写,可以被重写的方法必须在修饰符后面加上 virtual 关键字,重写的方法也需要在修饰符后面加上 override 关键字。代码如下:

        public class ClassA
        {
            public virtual string Search()
            {
                return "A";
            }
        }
        public class ClassB : ClassA
        {
            public override string Search()
            {
                return "B";
            }
        }
        public class ClassC : ClassA
        {
        }

    3、抽象也可以用来实现方法的重写。但是抽象方法必须放在抽象类中,继承抽象类的子类必须实现抽象类中的抽象方法,抽象类中的非抽象方法不用强制实现。抽象类中的抽象方法没有主体,且抽象类无法被实例化,只能通过子类继承调用。声明一个抽象类和抽象方法都需要在修饰符后加上 abstract 关键字,子类实现(重写)抽象方法,需要在修饰符后加上 override 关键字。代码如下:

        public abstract class ClassA
        {
            public abstract string Search();
            public void test() { }
        }
        public class ClassB : ClassA
        {
            public override string Search()
            {
                return "B";
            }
        }

    4、接口的实现和抽象类类似,继承接口的类也必须实现接口中的方法。不过不同的是,接口中的方法不需要修饰符,不能直接在接口中实现(方法不能有主体),不需要关键字。而且一个类只能继承一个类,却可以继承多个接口。代码如下:

        public interface ITest
        {
            string Search();
        }
        public class ClassB : ITest
        {
            public string Search()
            {
                return "";
            }
        }
  • 相关阅读:
    在博客园里给图片加水印(canvas + drag)
    Chrome开发者工具使用指南
    《古剑奇谭3》千秋戏辅助工具(前端React制作)
    React中useEffect的源码解读
    关于为什么使用React新特性Hook的一些实践与浅见
    使用@babel/preset-typescript取代awesome-typescript-loader和ts-loader
    使用dva改造React旧项目的数据流方案
    在React旧项目中安装并使用TypeScript的实践
    安利一个绘制指引线的JS库leader-line
    微信小程序中悬浮窗功能的实现(主要探讨和解决在原生组件上的拖动)
  • 原文地址:https://www.cnblogs.com/liangshibo/p/12197106.html
Copyright © 2020-2023  润新知