我们知道,抽象类是不能被实例化的。但抽象类是否可以有构造函数?答案是可以有。抽象类的构造函数用来初始化抽象类的一些字段,而这一切都在抽象类的派生类实例化之前发生。不仅如此,抽线类的构造函数还有一种巧妙应用:就是在其内部实现子类必须执行的代码。

以下就是在抽象类的构造函数中来初始化字段。

    class Program
    {
        static void Main(string[] args)
        {
            Employee employee = new Employee();
            Console.WriteLine(employee.ID);
            Console.ReadKey();
        }
    }
    public abstract class Base
    {
        private Guid _id;
        public Base()
        {
            this._id = Guid.NewGuid();
        }
        public Guid ID
        {
            get { return this._id; }
        }
    }
    public class Employee : Base
    {

    }

总结:虽然抽象类不能被实例化,但可以有构造函数。由于抽象类的构造函数在实例化派生类之前发生,所以,可以在这个阶段初始化抽象类字段或执行其它与子类相关的代码。

抽象类可以有构造函数吗相关推荐

  1. java 抽象类构造函数_抽象类可以有构造函数吗?

    是的,抽象类可以有构造函数.考虑到这一点:abstract class Product { int multiplyBy; public Product( int multiplyBy ) { thi ...

  2. Java中的抽象类可以有构造函数吗?/抽象类中的构造方法作用是什么?

    答案是肯定的. 在抽象类中定义构造函数,在语法上并不会报错,那么说明构造函数是可以存在的. 既然抽象类并不能实例化,那抽象类中的构造函数存在的意义是什么? 抽象类必须被子类继承来实现. 子类在调用父类 ...

  3. c# abstract抽象类与继承类子类的构造函数_base

    http://blog.itpub.net/9240380/viewspace-718054/ http://blog.163.com/cloud_thegreat/blog/static/10367 ...

  4. JAVA中的接口和抽象类的区别

    1.一个类可以实现多个接口,但是却只能继承最多一个抽象类: 2.抽象类可以包含具体的方法,接口的所有方法都是抽象的: 3.抽象类可以声明和使用字段:接口则不能,但接口可以创静态的final常量: 4. ...

  5. php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...

  6. JavaSE学习总结(六)——接口、抽象类、内部类

    一.不需要实例化的原因 看一个示例: package com.zhangguo.chapter5.s1;/**动物园*/ public class Zoo {public static void ma ...

  7. PHP的抽象类、接口的区别和选择

    1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过关键字extends继承. 2.接口中不可以声明成员变量(包括类静态变量),但是可以声明类 ...

  8. getvalue函数怎么使用_Java中的构造函数——通过示例学习Java编程(14)

    作者:CHAITANYA SINGH 来源:通过示例学习Java编程(14):Java中的构造函数-方家话题 构造函数是用来初始化新创建的对象的代码块.构造函数类似于java中的实例方法(Instan ...

  9. c++ 纯虚函数和抽象类那些事(三)

    抽象类可以有构造函数 /*** @file interesting_facts4.cpp* @brief 抽象类可以有构造函数* @author 光城* @version v1* @date 2019 ...

最新文章

  1. 大年初五,Python、Go、C...你最爱用哪种语言?
  2. Python_基础_3
  3. 【Python】Matplotlib太臃肿,试试Seaborn
  4. linux用户简单指令操作
  5. 适合网页设计师的11个不错的Chrome插件
  6. 4 QM配置-质量计划配置-编辑缺陷类型的代码组和代码
  7. 京瓷打印机1025默认管理员密码_京瓷2235默认登录密码_动漫台
  8. apue学习笔记(第六章 系统数据文件和信息)
  9. 2019人工智能写作软件
  10. alexa工具条下载_如何聆听(和删除)您给Alexa的每条命令
  11. sys.path介绍
  12. 算法题--递归解法(化整思想、24点、全排列、单词迷宫解法加步骤)
  13. 还在到处求人发原图?不如用Python给图片和 PDF 去掉水印~
  14. 实现小说自由,国产浏览器出手了,吊打各类阅读软件
  15. 【C语言】自定义类型(结构体类型+枚举类型+联合体类型)[进阶篇_ 复习专用]
  16. 小寒也会写程序(五)
  17. gardner环 matlab,【matlab编程代做】位同步Gardner环的研究
  18. modis数据简介及批处理工具
  19. Mac下载vscode 缓慢?以下解决方法起飞下载
  20. 老板带头反内卷,阿尔卑斯滑雪团建。。。别错过这一波上车机会

热门文章

  1. 免安装的mysql删除_MySQL5.7 免安装版配置及删除图文教程
  2. php option如何循环每一个值,Js 在option ={ data:[]}中怎么使用循环;
  3. 1.AutoRec: Autoencoders Meet Collaborative Filtering论文解读以及AutoRec代码实现(pytorch)
  4. 二十三、死锁的处理策略---避免死锁(银行家算法)
  5. 解决Linux最大进程数和最大文件句柄问题
  6. C++ CORE DUMP gdb 调试
  7. 使用Ansible中的playbook
  8. html浏览位置坐标,HTML5教程 | HTML5地理定位(GeoLocation API)
  9. java中1代表什么_请问java中81是什么意思?
  10. Maven全局配置文件settings.xml 全解