继承,“是一种”关系总是要持有吗?

时间:2012-06-09 22:41:02

标签: oop inheritance subtype

如果B类继承自A类,那么在继承中使用B类时,它总是必须是A的子类型吗?

我在想,当B不是A的子类型时,是否可以使用继承为B提供额外的代码?

2 个答案:

答案 0 :(得分:0)

如果类型A继承自B,则意味着两件事:

  1. 类`A`将能够使用类'B`中的public和protected静态方法,而不必指定类名,类'A`的对象将隐式包含来自`B的所有公共和受保护类成员`无需重新指定它们。
  2. 接受类型为“B”的对象的任何代码在编译时都会接受类型为“A”的对象,而类“A”的对象将能够使用类“B”的公共对象和受保护的实例方法本身。

接口本质上体现了概念#2而不是#1(因为接口没有静态方法,并且没有可以隐式使用的成员而不必指定它们)。在没有#2的情况下,没有内置的方法来实现#1;没有#2的#1的唯一重要好处是节省打字。

答案 1 :(得分:0)

如果:

class B extends A

根据定义,B的子类型为A

如果你不想这样,你可以使用PHP的 traits ,这基本上是接口与实现。