什么时候实施和扩展?

Ind*_*ial 79 php oop extend

  • 什么时候应该implement还是extend可以用吗?
  • 什么是现实世界的例子?

它是否正确?

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

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

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

预期的现实生活场景:我有一个叫sessions有两个名为sessioncookies和的子类的类databasesessions.sessioncookies并且databasesessions,它们一起从其父会话继承了许多相互配置选项,从而可以轻松更改配置选项以影响各种最终的访客数据存储.

Raf*_*ler 59

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

implements当您想要定义一组对象应如何表现的通用协议时,接口(和)非常有用.例如,您可能希望强制比较可比较的对象的相等性和散列等.

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

继承是OOP中的一个重要概念,它不仅仅是PHP.我建议你阅读关于继承的维基百科文章,以及四人帮的设计模式.

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

  • 现在很多人认为"四人帮"这本书在材料方面过于沉重,不过是对设计模式的介绍.一个受欢迎的选择是Head First:Design Patterns,它可以提供更轻松的阅读.http://www.amazon.co.uk/Head-First-Design-Patterns-Freeman/dp/0596007124 (4认同)
  • “继承对于减少重写的代码量很有用” - 继承的目的是共享行为,而不是代码。在可能的情况下,特征是共享代码的方式,而不是使用没有任何共同点的具体类来扩展抽象类。您通常也可以将您的类建模为 has-a 而不是 is-a 关系,这将进一步促进代码可重用性和多态性。 (2认同)

Ahm*_*aki 7

Implement:

Interfaces are abstract classes, so you can only declare things. A class implements an interface. You can implement multiple interfaces.

Extend:

当您需要类的更特定版本时,可以扩展类。

例:

// Contract: a pet should play
public interface Pet {
    public void play(); 
}

// An animal eats and sleeps
class Animal {
    public void eat();
    public void sleep();
}


public class Dog extends Animal implements Pet {

    public void play() {...}
}


public class Camel extends Animal {
}
Run Code Online (Sandbox Code Playgroud)

骆驼和狗都是动物,因此它们扩展了Animal阶级。但是只有狗可以是宠物!