100%抽象类与接口

dan*_*car 10 php java oop

是否有理由使用100%抽象类而不是接口?你能不能给我一个很好的例子,这样我可以把握一下这个概念?

更新:100%抽象类 - >抽象类,只有抽象方法.如果php和java之间在这方面存在差异,我很好奇.

Update2:即使我理解大多数原因,我对概念更感兴趣而不是技术原因.

Boz*_*zho 18

如果"100%抽象类"是指"没有具体方法的抽象类",那么我可以想出一个原因:可见性.

您可以定义要保护的抽象方法,因此不是该类的公共API的一部分.然而,这似乎是一个奇怪的设计.

我想到的另一件事是你期望为基类添加通用功能 - 即它是否可能有一些所有实现者共享的实用方法,但这些方法没有实现.

另一件事 - 实例变量.您可以在抽象类中包含可继承的实例变量.

  • 在100%抽象类中,您还可以定义可以被激活的非常量变量.接口不可能. (6认同)
  • 另一件事是构造函数......这在接口中也是不可能的 (2认同)

Arn*_*sch 11

"100%抽象类"在界面上可能是有利的一种情况是API稳定性是关键问题的地方.

如果您编写API,其他人应该实现您的界面,您必须坚持使用该界面.您以后不能向接口添加任何方法,因为这会破坏所有客户端(您必须通过实现第二个接口来解决此问题,并让您的代码再次检查instanceof检查的用法并提供回退).

如果您对某个类实现了相同的功能,则可以在以后添加(非抽象)方法而不会破坏客户端.