implement还是extend可以用吗?实现似乎是一种强制某类方法存在的方法,并且这些方法函数调用的格式正确.实现不是将变量或"设置"传递给类的方法吗?
预期的现实生活场景:我有一个电子商务平台,其中包含多个支付类,所有支付类都遵循相同的设计.当应该添加新的支付类时,很容易遵循定义的设计interface,从一开始就确保所有的零碎都在那里.
扩展类使扩展(child?)类继承其父类的所有内容,但声明为的方法和变量除外private?
预期的现实生活场景:我有一个叫sessions有两个名为sessioncookies和的子类的类databasesessions.sessioncookies并且databasesessions,它们一起从其父会话继承了许多相互配置选项,从而可以轻松更改配置选项以影响各种最终的访客数据存储.
Raf*_*ler 59
继承对于减少重写的代码量很有用.如果您有几个具有一些常用方法或字段的类,而不是一遍又一遍地定义这些方法和字段,则可以将它们分解为基类,并让每个子类扩展该基类.
implements当您想要定义一组对象应如何表现的通用协议时,接口(和)非常有用.例如,您可能希望强制比较可比较的对象的相等性和散列等.
使用继承最终是一种设计选择.请留意您在多个类中定义相同方法的情况; 这些都是很好的情况,你可以将这些方法分解为基类.对于观察到某些相同特征的类也是如此:通过将这些特性放在接口中以便由这些相关类实现,可以保证一致性.
继承是OOP中的一个重要概念,它不仅仅是PHP.我建议你阅读关于继承的维基百科文章,以及四人帮的设计模式.
我相信你对继承的理解主要是正确的.下一步是在生产中使用它.
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阶级。但是只有狗可以是宠物!