• 接口继承自System.Object吗?


    很久没有自己写随笔了, 工作太忙。 最近有学生问我问题,接口是否继承自System.Object? 我经过一些推断就断定不是。

    他给我一篇文章,上面通过代码的分析得出的结论也不是。不过我觉得好像把一个简单的问题搞复杂了,下面我介绍一下我的

    推断,提供参考和一种解决问题的思维方法。 

       首先我们从C++说起, c++可以多继承。也就是一个类型 --- class,可以继承自2个以上的父类型。多继承导致一个问题,

    很多人知道。例如,如果类型B,类型C均继承自类型A。然后类型D继承自类型B和C。那么构造D的实例的时候,由于要调用

    父类型的构造方法,最终会调用两次A的构造方法。结果类型D的实例有两套祖父的数据,也就是外公和爷爷长的一模一样,

    以后使用的时候很麻烦。每次D要和祖父打交道,都要额外的区分到底是外公还是爷爷。 再说,内存里面出现两套一模一样的

    东西,一个用不上,还容易引起混乱,岂不是浪费,又麻烦。

      所以,java就通过严格的单一继承规则解决了这个问题。.net当然也一样,单一集成是一个定律。那么有:

    所有的类型 --- 只能继承自单一的类型;

    其次,大家知道,从一个Type派生的必然是另一个Type。 System.Object是一个Type,如果interface继承自System.Object,

    那么interface必然是一个Type。 

        那么,如果一个类型实现了一个interface,再有一个基类class, 那么它们的根源都是System.Object, 也即是这个类的实例也像

    c++一样,存在上述的问题。 因此接口肯定不是继承自System.Object,否则就违反了单一继承的定律。

  • 相关阅读:
    visio画UML用例图没有include关系的解决方法
    个人推荐-几款好用的App
    win10锁屏壁纸文件夹Assets中无文件问题的解决方法
    云服务器搭建Jupyter-主要部分为配置服务器安全组+添加python3
    开通博客的第一天
    express学习(二)—— Post()类型和中间件
    自定义模块
    命名参数名(含*args , * *kw的区别)
    Python学习之中文注释问题
    Python学习之再议row_input
  • 原文地址:https://www.cnblogs.com/worldreason/p/1404019.html
Copyright © 2020-2023  润新知