Object 我认为继承是这三件事的结合,对吗?
A继承B意味着Object 我认为继承是这三件事的结合,对吗?,object,inheritance,multiple-inheritance,Object,Inheritance,Multiple Inheritance,A继承B意味着 A拥有B A共享所有B接口 A共享B接口的实现 抽象类类似于objective-c中的@protocol A意味着B 2.A共享所有B接口 至于A拥有B,A共享B的实现,我认为这是可以通过@protocol和category的组合来“推动”的 在任何情况下,这就是继承的全部,对吗 所有权 共享接口 共享实现 如果我在这些方面有任何错误,请任何人纠正我 所有权是的,这基本上是正确的。有些人可能会对“所有权”的说法吹毛求疵。这可能表明B“有a”而不是“B”是aA.在面向对象的行话中,
所有权是的,这基本上是正确的。有些人可能会对“所有权”的说法吹毛求疵。这可能表明B“有a”而不是“B”是aA.在面向对象的行话中,has-A关系通常意味着B的一个字段是指向A对象的指针。is-A关系意味着B的部分内存包含A对象。对于常见的面向对象语言,继承意味着is-A关系,而不是has-A关系 考虑这两个草图
B has-a A
=========
+--------------+ +----------------+
B* b -> | A* a_part | -> | float a_field1 |
| int b_field1 | | float a_field2 |
| int b_field2 | +----------------+
+--------------+
B is-a A
========
+----------------+
B* b -> | float a_field1 | <- A* a_part_of_b
| float a_field2 |
| int b_field1 |
| int b_field2 |
+----------------+
B有一个a
=========
+--------------+ +----------------+
B*B->| A*A|部分|->|浮动A|U字段1|
|int b|U字段1 |浮点a|U字段2|
|int b|U field2|+----------------+
+--------------+
B是a
========
+----------------+
B*B->| float a|u field1 |这里的“所有权”概念可能有问题。我认为最简单的说法是,当从“B”继承时,“a”做“B”所做的一切,除了“a”决定做一些不同的事情。“a”对“B”没有所有权,除了默认情况下,它充当“B”,直到你告诉它做一些事情不同。A确实拥有B的所有权。在存储A的内存中,有B。A有一个引用B的字段,称为super。