我有一个班级ParentClass()
,一些子班级ChildClass1()
,ChildClass2()
等,以及一个界面iChild()
。 ChildClass()
继承自ParentClass()
并实施iChild()
:
class ChildClass1
extends ParentClass
implements iChild {}
class ChildClass2
extends ParentClass
implements iChild {}
在iChild()
- 接口中,我想要求一些常量需要填充(主要是标识符和一些功能定义)。我没有发现任何意义这样做,因为常量只能在接口中定义,但在实现类中不能重新定义。我找到的唯一解决方法是在iChild()
中定义一些getter-functions,然后返回必要的值,但这似乎不是正确的方法。由于我已经从ParentClass()
扩展,我也不能使用抽象类来例如检查所有ChildClasses中所需常量的定义。
关于如何解决这个问题的任何想法?
更新:回答评论 - 更精简,更具可读性我的意思是:
class ChildClass1 {
const MY_NAME = "Foo Bar Name 1";
}
-- vs --
class ChildClass1 {
public function GetMyName() {
return "Foo Bar Name 1";
}
}
我发现第一个例子比第二个例子更易读和易懂。不幸的是,我目前无法通过ChildClasses强制执行MY_NAME。
答案 0 :(得分:3)
我不确定这里的正确解是一个常数。常量的定义是它不会改变。如果iChild
的每个实现都需要定义常量,那么它实际上不是常量,它是一个变量。我建议添加适当的getter方法,与用户沟通,他们需要在实现中提供这些信息。
好的,我做了一些测试,一个类无法覆盖它正在实现的接口或它正在扩展的父类的常量集。似乎在编译时检查类常量,如果您尝试覆盖它,则会引发致命错误。对于您要做的事情,适当的答案是在您的界面中提供getter方法。