2011-06-16 143 views
30

在我见过的每个例子中,扩展类都实现了父类的接口。作为参考,下面的例子:扩展类中的接口和抽象类的继承,实现

interface MyInterface{ 
    public function foo(); 
    public function bar(); 
} 

abstract class MyAbstract implements MyInterface{ 
    public function foo(){ /* stuff */ } 
    public function bar(){ /* stuff */ } 
} 

// what i usually see 
class MyClass extends MyAbstract implements MyInterface{} 

// what i'm curious about 
class MyOtherClass extends MyAbstract{} 

是未能实现一个孩子,这是由家长来实现一个接口,被认为是不好的做法还是什么?是否有任何技术上的缺陷来忽略孩子的实施?

+1

你没看我的例子,然后 – Gordon 2011-06-16 08:39:16

+0

@戈登 - 没有先生,我没有。所以我假设你通常会忽略子类声明的接口。 – Dan 2011-06-16 08:41:22

+1

是的,确切地说。无论如何,孩子将实现该接口。见http://codepad.org/OTZ2J5kB – Gordon 2011-06-16 08:52:47

回答

19

我会认为你是在正确的道路上。当扩展已经是implements的类时,没有必要声明您正在实现接口。对我而言,如果需要更改,这只是另一段代码。所以,是的,你是对的!

+0

谢谢**埃米尔伊万诺夫**;这就是我所设想的。我并没有在接口上工作太多(*超越了SPL等),并开始将它们融入到我的项目中,因为越来越多的代码将被客户端程序员所触及。我主要担心的是如果由于遗漏而可能发生任何继承变更。 – Dan 2011-06-16 08:44:57

0

未能在儿童中实施接口,由父母实施,认为是不好的做法或什么?

孩子总是实现接口,它不能与此交往。

我不知道,如果这是不好的做法或什么的。我会说这是一种语言功能。

是否有任何技术上的缺点,忽略儿童的实施?

例如,您无法测试抽象类的反射。

但是,抽象类已经是一个接口,所以在技术上他们自己并不真的需要接口,但是你可以这样做来保持事​​物在继承中的流畅性。

17

是未能实现一个孩子,这是由 母公司实现的接口 ,被认为是不好的做法或 什么?是否有任何技术 的缺点,以忽略儿童实施 ?

我不能回答你的问题比这更好的家伙:

从性质上说,虽然有时 它们看起来非常相似,抽象 类和类接口服务 非常不同的目的。

类的接口意味着该类的“用户”的 工具。 接口是 该类的公开演示文稿,它应该向 发送广告,任何人都在考虑使用它, 方法和常量可用 并且可以从外部访问。所以, 顾名思义,它总是坐落在 之间的用户和类 实施它。

另一方面,抽象类 是一个工具,旨在帮助 扩展它的类的“实现者”。这是一个基础设施 ,它可以强加限制和 类的具体指导。从类 的设计角度来看,抽象类 比接口在架构上更重要 。在这种情况下, 实现者位于抽象类 类和具体类之间,后者位于前者之上 。

Reference

因此,它是由你来决定的基础上,谁去使用(实例)的类和谁去写他们。如果你是你课程的唯一用户和作者,那么也许,也许,你不需要他们两个。但是,如果你想让每个人都被剥离为类作者和类用户的核心蓝图,那么你应该考虑同时使用抽象和实现。

0

嗯,我也很困惑,但我认为你应该使用后者,你说得对,如果你在抽象类中实现了接口,那么就没有必要写这个接口,你可以编写方法因为你将扩展抽象类,并且当你在其他地方使用类时,你将不得不使用抽象类作为参数类型,这不是一件好事,我认为抽象类类不应该用作参数类型,而应该是一个接口。