什么时候实施和扩展?

时间:2011-02-10 19:52:41

标签: php oop extend

  • 应该何时使用implementextend
  • 什么是现实世界的例子?

这是正确的吗?

实现似乎是一种强制某类方法存在的方法,并且这些方法函数调用的格式正确。实现是一种将变量或“设置”传递给类的方法吗?

预期的现实生活场景:我有一个电子商务平台,其中包含多个支付类,所有支付类都遵循相同的设计。当应该添加新的支付类时,很容易遵循interface的定义设计,以确保从一开始就存在所有的零碎。

扩展类使得扩展(child?)类继承其父类的所有内容,但方法&变量声明为private

预期的现实场景:我有一个名为sessions的类,其中有两个名为sessioncookiesdatabasesessions的子类。 sessioncookiesdatabasesessions一起从其父会话中继承了许多相互配置选项,从而可以轻松更改配置选项以影响各种最终的访问者数据存储。

2 个答案:

答案 0 :(得分:57)

继承对减少重写的代码量很有用。如果你有几个带有一些常用方法或字段的类,而不是一遍又一遍地定义这些方法和字段,你可以将它们分解为基类,并让每个子类扩展该基类。

当您要为一组对象的行为方式定义一个公共协议时,接口(和implements)非常有用。例如,您可能希望强制比较可比较的对象的相等性和散列等。

使用继承最终是一种设计选择。请留意您在多个类中定义相同方法的情况;这些都是很好的情况,你可以将这些方法分解为基类。对于观察到一些相同特征的类也是如此:通过将这些特性放在接口中以便由相关类实现,可以保证一致性。

继承是OOP中的一个重要概念,它不仅仅是PHP。我建议您阅读the wikipedia article on inheritance,也许Design Patterns by the Gang of Four

我相信你对继承的理解主要是正确的。下一步是在生产中使用它。

答案 1 :(得分:0)

实施:

接口是抽象类,因此您只能声明事物。实现是为了实现接口!您可以实现多个接口。

扩展:

您想要扩展类时,想要一个特定的类版本。

示例:

abstract class Animal {
    private String name;

    public void eat();
    public void sleep();
}

public interface Pet {
    public void play();
}

public class Dog extends Animal implements Pet {
    public void eat() {
        // do stuff
    }

    public void sleep() {
        // do stuff
    }

    public void play() {
        // do stuff
    }
}

public class Hippo extends Animal {
    public void eat() {
        // do stuff
    }

    public void sleep() {
        // do stuff
    }
}

河马和狗都是动物,因为它们都是动物。但是只有狗可以是宠物!