标题不太清楚,但我没有看到如何用短句解释它。
我有一个接口myInterface(这必须是一个接口,而不是一个抽象,因为枚举会实现它)。 我希望有一个属性myAttribute(整数),除了来自接口(受保护)的派生类之外,它不能从外部访问。 我想要一个方法myMethod,它将myInterface作为输入参数。但是,当我尝试实现它时,我遇到了麻烦。 该方法看起来像这样
boolean myMethod(myInterface interface)
{
return this.myAttribute>interface.myAttribute;
}
我无法定义" myAttribute"在" myInterface"中受到保护。 如果我没有定义" myAttribute"在" myInterface"中,当我在派生类中实现它时,我无法在myMethod的定义中使用它:签名应该包含" myInterface"作为输入参数,这个没有任何" myAttribute"属性。 我现在唯一的解决方案是投射" myInterface"在它的衍生物中,但我不喜欢它(在全球范围内,我不喜欢演员表)。有没有人有另一个想法?
答案 0 :(得分:1)
你做不到。
接口只能定义(隐式)public static final
个变量,否则说是公共常量。
你应该做的是定义一个方法,在你的界面中返回你的属性,反过来,它的实现类将被强制实现(如果它们不是抽象的)。
该方法将隐式public
。
这也将强制在实现类中封装变量。
然后,您可以通过在界面上虚拟调用getter方法来检索值:myInterface.getMyAttribute()
。
修改强>
如果您的作用域无法访问实现公共接口的所有类之外的实例字段的值,则可以通过在接口和接口之间设置抽象类来代理您的层次结构。你的实施课程。
反过来,抽象类不会实现任何接口方法(因此仍然强制具体类实现所有),而是具有一个protected
属性,具体类将具有访问权限。
最后,具体类可以决定是否允许其他类访问该字段。