• 虚函数、纯虚函数、抽象类、接口 (Java_C++_C#)


      在OOP编程语言中,多态是很重要的OOP思想。而多态的语法支持离不开虚函数。每次都把什么虚函数,抽象类搞混,这次好好整理下!

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

           在Java中没有虚函数的概念,函数默认即为虚函数,动态绑定是Java的默认行为,在Java语法中如果不希望函数具有虚函数特性,可使用final关键字变成非虚函数。

       Java中有抽象函数概念,使用abstract定义,这个概念和C++中的纯虚函数的定义很类似。

           Java中,抽象函数只有定义而没有实现,它的实现由子类提供,一个包含抽象函数的类必须声明为抽象类。

        而Java中的接口只包含常量和抽象方法,接口其实和C++中的纯虚基类类似。Java中的接口是为了实现多重继承的。Java中接口和抽象类不能实例化。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

       C++中普通函数继承后可以重写,但是想要支持多态,必须为虚函数或纯虚函数。虚函数只要在函数声明前加 virtual 关键字即可,虚函数有实现,而纯虚函数声明为 virtual void funtion()=0

          C++中,类中只要存在纯虚函数即为抽象类,不能实例化,但C++中无需将类声明为abstract。

       C++中,没有接口的定义,但可以将纯虚基类理解为一种接口。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      C# 中语法像是C++和Java的结合体,C#中函数必须声明为虚函数(可有实现)或抽象函数(不能有实现),才可以在子类中Override。

      其中C#中抽象类可以包含抽象方法和非抽象方法,和其他语言类似的,抽象类不能实例化。

      C#中接口中不能为成员方法实现方法,只能在实现接口的类中去实现,而且必须全部实现,这个语法与Java中接口类似。

         

  • 相关阅读:
    go test 测试单个文件报错问题
    分布式应用异常测试一二说
    DevOps工程师到底做些什么?
    Devops高薪看这个就够了
    想使用Docker容器?先看看这些注意事项
    情景领导
    Robotium编写测试用例如何模拟Junit4的BeforeClass和AfterClass方法2
    Robotium编写测试用例如何模拟Junit4的BeforeClass和AfterClass方法1
    自己动手修改Robotium代码(下)
    自己动手修改Robotium代码(上)
  • 原文地址:https://www.cnblogs.com/Onlyou/p/4398579.html
Copyright © 2020-2023  润新知