日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

为什么Object不是抽象的?

Home Forums 《冒号课堂》讨论区 为什么Object不是抽象的?

  • This topic is empty.
Viewing 6 reply threads
  • Author
    Posts
    • #1130
      Lumj
      Member

      RT,冒号老师你在书中提到过不论是.net还是java中的Object class都不是抽象的,我看到这之后突然发现好像没注意过这个问题.我思考了一下,想不出为什么会这样设计

      我的想法很简单:一个Object实例并不能完成什么工作

    • #1338
      hui
      Keymaster

      Object虽然大多时候作为其他类的公共超类,但也有需要实例化的时候。作为一个具有最基本对象特征且占内存最小的对象,Object实例在一些场合是有用或方便的。比如Java中可以把一个Object对象作为Lock,以实现比synchronized(this)更细的锁,或者利用Object的wait/notifyAll来实现mutex之类的功能。此外,完全可以想见Object实例的其他应用,尤其是在需要产生一个实体对象但并不关心其内容的时候。

    • #1339
      Lumj
      Member

      哦..能不能再举两个例子?因为.net的Object并没有关于同步问题的方法(而且我对同步问题不太熟悉),我现在想象不出其它的”需要产生一个实体对象但并不关心其内容”的情形

    • #1340
      hui
      Keymaster

      这个例子在实际编程中并不鲜见啊,即所谓的dummy对象。比如要测试一个Collection(集合)类(如stack、queue、set等)是否满足给定的要求,往往需要构建一些元素进行添加,但并不在乎元素的具体内容。在一些数据结构的算法中,也可能引进dummy对象,以避免对null元素的特殊处理。另外,有时候一个集合或容器需要非null的placeholder,一个object对象是最方便、最少依赖、也最少占内存的了。

    • #1341
      Lumj
      Member

      嗯..我知道了

    • #1342
      Lumj
      Member

      冒号老师,我现在觉得不对,以上例子中对dummy object的需要,应当以DummyObject:Object的做法来满足,Object仍保持纯正的根类身份

    • #1343
      hui
      Keymaster

      首先,引入Dummy Object增加了设计者的负担。我举的dummy object只是一个例子,实际中可能还有其他的需求,使用者难以取舍和抉择。其次,更多的基础类也增加了使用者选择和学习的负担。最后,即使这样更合理,Java、C#等设计者也未必认同,毕竟编程原则虽然有共识,但在具体设计上仍然见仁见智。即便认同,当初设计时他们也可能没有考虑到。世界上不存在绝对符合编程原则的设计,何况这些原则本身也不是铁律,为了性能优化或设计简洁等原因也可能会违背其中的一部分。听起来是废话,但的确是事实,编程就是这样兼具理论性和实践性的一门学位。

Viewing 6 reply threads
  • You must be logged in to reply to this topic.
 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)