首页
学习
活动
专区
圈层
工具
发布

OOP -继承
EN

Stack Overflow用户
提问于 2013-01-24 07:15:46
回答 8查看 1.2K关注 0票数 1

如果我有一个类,动物类。

我有一个类Dog和一个类Cat,它们都继承了Animal。

Cat可以调用Animal内部的方法。但是Cat可以调用Dog的方法吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-01-24 07:22:06

定义在超类中的方法可以被任何子类访问。但是“姊妹”类不能访问彼此的(私有)方法。

因此,如果您的类CatDog继承自Animal,那么CatDog对象都可以从Animal调用方法,但它们不能(一定不能)访问对方的方法。

票数 2
EN

Stack Overflow用户

发布于 2013-01-24 07:23:40

你的问题的答案可以这样回答,比如这是一只猫,一只狗?

我让你来回答这个问题。

票数 6
EN

Stack Overflow用户

发布于 2013-01-24 07:21:58

不,它不能,也不应该(至少在谈论适当的OOP时不应该)。如果一只猫真的需要一只狗(不管是什么病的原因),你应该给猫注射狗。如果你认为你需要它,你可能有错误的继承/抽象。

代码语言:javascript
复制
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();

上面是一个注入的例子。注意,正如Tony Hopkinson所说,在本例中,您调用的是dog实例上的方法。你可以在类上调用方法,如果它们是public static的,但是因为它被标记为OOP,所以你真的不应该这样做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14491186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档