Oop 玻璃物体。只能使用该引用变量调用子类的继承/重写方法。这在编译时决定。[如果被调用的fn由引用变量标识或否]
Dog类对象不知道独占的Cat类函数[继承的和重写的函数除外],因此无法调用这些方法Oop 玻璃物体。只能使用该引用变量调用子类的继承/重写方法。这在编译时决定。[如果被调用的fn由引用变量标识或否],oop,class,Oop,Class,Dog类对象不知道独占的Cat类函数[继承的和重写的函数除外],因此无法调用这些方法 正如其他人所指出的,如果你有这样的情况,你可能不会寻求继承。@DWright,;)因此,除非您明确地执行朋友级狗?@stackplasm,否则它不会工作。你也可以把猫和狗交给对方,但这会带来各种潜在的问题。你为什么想让它工作?我不会的。把猫变成狗表明遗传是错误的机制。Friend是一个黑客,万不得已而不是第一个。@PeeHaa,这是一个不容忍Javascript的答案的原型:-]。@DWright,;)因此,除
正如其他人所指出的,如果你有这样的情况,你可能不会寻求继承。@DWright,;)因此,除非您明确地执行
朋友级狗?@stackplasm,否则它不会工作。你也可以把猫和狗交给对方,但这会带来各种潜在的问题。你为什么想让它工作?我不会的。把猫变成狗表明遗传是错误的机制。Friend是一个黑客,万不得已而不是第一个。@PeeHaa,这是一个不容忍Javascript的答案的原型:-]。@DWright,;)因此,除非您明确地执行朋友级狗?@stackplasm,否则它不会工作。你也可以把猫和狗交给对方,但这会带来各种潜在的问题。你为什么想让它工作?我不会的。把猫变成狗表明遗传是错误的机制。Friend是一个黑客,万不得已,而不是第一个。@PeeHaa,这是一个不容忍Javascript的答案的原型:-]你能解释一下“注入”是什么意思吗?如果你把狗的距离传给猫的话。Cat仍然不会调用dogs方法,它们会在您传入的dog上被调用。@Barranka:Inject的意思是“从外部灵活配置另一个对象”。该术语来自依赖项注入,值得在谷歌上搜索更多信息。@Barranka-Related:。事实上,整个干净的代码系列都很好:把狗注射到猫身上?可视化。。。令人厌恶的SCNR:)+1提到了错误的继承。你能解释一下“注入”是什么意思吗?如果你把狗的距离传给猫。Cat仍然不会调用dogs方法,它们会在您传入的dog上被调用。@Barranka:Inject的意思是“从外部灵活配置另一个对象”。该术语来自依赖项注入,值得在谷歌上搜索更多信息。@Barranka-Related:。事实上,整个干净的代码系列都很好:把狗注射到猫身上?可视化。。。令人厌恶的SCNR:)+1用于提到错误的继承。+1-我经常发现,用(英语)语言构建oo问题可以很容易地解决。一个经典的例子是“是A”和“有A”。这是你应该问的第一个问题。然后是你最后问的近亲,猫还是猫吗?说到自然语言中的领域术语及其关系,OOP就是为了这个而发明的+1-我经常发现,如果用(英语)语言来表达,oo问题可以很容易地解决。一个经典的例子是“是A”和“有A”。这是你应该问的第一个问题。然后是你最后问的近亲,猫还是猫吗?说到自然语言中的领域术语及其关系,OOP就是为了这个而发明的!
class Animal
{
public annoy();
}
class Cat extends Animal
{
private $dog;
public function __construct(Dog $dog)
{
$this->dog = $dog;
}
public function annoyDog()
{
$this->dog->annoy();
}
}
class Dog extends Animal
{
}
$dog = new Dog();
$cat = new Cat($dog);
$cat->annoyDog();
If I have a class, class Animal.
And I have a class Dog and a class Cat both inheriting Animal.
Cat can call methods inside Animal. But can Cat call methods of Dog?
class Animal
bark:-> "i'm an animal"
class Dog extends Animal
eatBone : -> "i'm eating a bone"
class Cat extends Animal
cat = new Cat
alert Dog::eatBone.call cat