我想到的概念来自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
}
}
}
答案 0 :(得分:1)
接口的目的是定义应用程序如何访问对象,而不是控制对象的定义方式。这是对象向应用程序声明的一种方式,“我实现了这个接口,所以你可以相信我有这些方法。”
如果要控制对象的定义方式,则应使用抽象类和抽象方法。