zoukankan      html  css  js  c++  java
  • 接口、抽象类、虚方法、重写、重载的关系

    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 "";
            }
        }
  • 相关阅读:
    little_by_little_2 为一个数据集创建一个dataset类。(基于pytorch)
    knn_in_python
    test
    numpy一些基础知识
    PIL模块
    环境小硕的转化之路-28-面向对象编程方法的适应性训练
    环境小硕的转行之路-27-面向对象的成员
    环境小硕的转行之路-26-初识面向对象
    3DES小工具
    环球好货,小黑鱼就是一个骗局
  • 原文地址:https://www.cnblogs.com/liangshibo/p/12197106.html
Copyright © 2011-2022 走看看