百科问答小站 logo
百科问答小站 font logo



类(class)能不能自己继承自己? 第1页

  

user avatar   feng-yu-yao 网友的相关建议: 
      

不行,继承关系会出现环。

假设类A继承类A。

那么要新建一个类A的对象,就必须先建立一个类A父类的对象。这是一个递归的过程,而且没有终止条件。会死循环的。

从编译的角度讲,声明类A的时候需要用到它的父类,但是此时类A还没有声明。所以是不可行的。

=== 犹豫了一下的分割线 ===

评论区有同学说了模版这种妖术可以解决。我仔细想了想,貌似还真有编程语言可以实现。

比如在Lua中一种常见的继承方式是使用metaclass。此时只要将metaclass指向自己就好了。此时的继承关系依旧是个环…区别在此处的环形继承关系是在运行时的时候创建的,所以可以硬上,之前的是要求运行前就搞定的,所以在创建的时候会有问题…此时的继承关系不影响你使用:P。同理其他的像JS啊之类的东东也可以有类似的用法。然而并没有什么卵用……




  

相关话题

  高内聚低耦合是矛盾的吗? 
  C#中,形如 Base<T>是父类,那么子类A:Base<A>这种操作有什么规范? 
  C#中,形如 Base<T>是父类,那么子类A:Base<A>这种操作有什么规范? 
  既然Java反射可以访问和修改私有成员变量,那封装成private还有意义么? 
  c#中没有友元类那么这种设计是否不太合理,如何修改才能得到更好的方案? 
  为什么C#中型变不能直接修饰在类定义上? 
  怎么给VBA代码提速? 
  面向对象中接口应该更抽象还是更具象? 
  C++ 允许「我们都是人,所以我可以把你私有的眼睛借来随便玩,再还给你」,这难道是一种设计上的妥协? 
  c#中没有友元类那么这种设计是否不太合理,如何修改才能得到更好的方案? 

前一个讨论
C#的dynamic使用中有什么需要注意的地方,以免滥用?
下一个讨论
什么是寄存器压栈?栈是内存的一部分,寄存器是cpu一部分,怎么压?





© 2024-11-25 - tinynew.org. All Rights Reserved.
© 2024-11-25 - tinynew.org. 保留所有权利