我想到的概念来自Traversable界面.此接口不能直接实现,而是通过实现扩展它的接口来满足.
我可以声明一个无法实现的接口,而是使用公共接口扩展吗?
编辑:我意识到这种可能性是毫无意义的,因为它可以被第三方创建一个可以扩展基本接口的接口来规避.我正在寻找一种表达多态性的更简洁的方法.
例如:
abstract interface Vehicle
{
}
interface Car extends Vehicle
{
public function drive(RouteProvider $routeProvider, $speed)
}
interface Boat extends Vehicle
{
public function sail(BodyOfWater $water, $heading);
}
class PeopleMover
{
public function move(Vehicle $vehicle)
{
if ($vehicle instanceof Boat) {
// move people across bodies of water
} elseif ($vehicle instanceof Car) {
// move people along roads
}
}
}
Run Code Online (Sandbox Code Playgroud)
接口的目的是定义应用程序如何访问对象,而不是控制对象的定义方式。这是你的对象向应用程序声明的一种方式,“我实现了这个接口,所以你可以相信我有这些方法。”
如果你想控制对象的定义方式,你应该使用带有抽象方法的抽象类。