zoukankan      html  css  js  c++  java
  • C#类、接口、虚方法和抽象方法

        虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?

    1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项。抽象方法没有提供实现部分,抽象方法是一种强制派生类重写的方法,否则派生类将不能被实例化

    2. 抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写。虚方法不是也不必要重写。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的

    3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚拟方法不必。抽象方法不能声明方法体,而虚拟方法可以。 包含抽象方法的类不能实例化 ,而包含虚方法的类可以实例化

    //虚方法
    public class Animal
    {
        public virtual void Sleep(){}
        public virtual void Eat(){}
    }

        虚拟方法和抽象方法有什么区别与联系

    1、抽象方法只有声明没有实现代码,需要在子类中实现;虚拟方法有声明和实现代码,并且可以在子类中重写,也可以不重写使用父类的默认实现。

    2、抽象类不能被实例化(不可以new),只能实例化实现了全部抽象方法的派生类;而包含虚方法的类可以实例化。

    3、虚方法与多态性关系密切,虚方法允许派生类完全或部分重写该类的方法,需写方法体。抽象方法只是一个定义,没有方法体,也就是没有{},也不要在里面写内容。

    4、抽象方法是虚拟方法两个相像的一点是都用override重写

        非抽象类与接口的差别

    1、非抽象类可以有成员变量、常量和构造函数,而接口中不能存在常量、域、操作符、构造函数或析构函数,而且不能包含任何静态成员。
    2、一个非抽象类可以继承多个接口,而只能继承一个类;
    3、非抽象类中可以定义具体的方法和实现,而接口只定义方法没有具体的实现;
    4、接口成员一定是公共的,而且不能声明为虚拟或者是静态的,而非抽象类中是没有这些限制。
    5、非抽象类可以被实例化,而接口不可以。一般来说,非抽象类的内容较接口要丰富得多,非抽象类可以有面向对象所有的绝大部分组成元素。但是接口相对于非抽象类来说更加灵活,两者在使用上冲突不大,在使用的时候视具体情况而定

  • 相关阅读:
    一致性哈希算法
    Discourse 的标签(Tag)只能是小写的原因
    JIRA 链接 bitbucket 提示错误 Invalid OAuth credentials
    JIRA 如何连接到云平台的 bitbucket
    Apache Druid 能够支持即席查询
    如何在 Discourse 中配置使用 GitHub 登录和创建用户
    Apache Druid 是什么
    Xshell 如何导入 PuTTYgen 生成的 key
    windows下配置Nginx支持php
    laravel连接数据库提示mysql_connect() :Connection refused...
  • 原文地址:https://www.cnblogs.com/yyxiangjava/p/5576243.html
Copyright © 2011-2022 走看看