代码之家  ›  专栏  ›  技术社区  ›  Jono

接口中的Java保护方法?

  •  1
  • Jono  · 技术社区  · 14 年前

    我正在尝试创建一个接口,在该接口中,它的方法受到保护,或者只对实现它的类可见。

    问题是这个。我有两个类,它们或多或少地做着完全相同的事情,但是有不同的参数和行为,但是实际的步骤是相同的。

    我在想,我有两个类似的类,所以让我们创建一个接口,这两个类都实现。应该没事吧?嗯,的确如此。它完成了任务,但有一个严重的缺陷,我的意思是它在这两个类中覆盖的所有方法现在都可以用肉眼看到。

    它们可以被访问,因为它们被定义为“公共”。有封装:(

    我想到的另一个解决方案是使用一个抽象类,但是等等,你只能扩展一个抽象类,而我使用的两个类已经扩展了一个类(在我的例子中是一个Android服务类),所以这个想法也被提出来了。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Abhijeet Rukmangad    14 年前

    如果您的两个类都能更好地扩展服务类,那么您可以声明一个抽象的超级类,而不是扩展服务类。所以您可以看到,您不必担心继承结构以及方法的可见性。

        2
  •  3
  •   aioobe    14 年前

    没错。安 interface 是类接口的定义,因此您不必担心实现细节,例如如何实现接口。即使在保护方法方面也不行。

    在大多数情况下,这是通过使用抽象类来解决的。如果您的两个实现已经扩展了另外两个不同的类,那么您可能需要在代码中稍微“重复”一下。

    尽管我不确定我理解你的问题。当你说这些类在许多方面的行为都相同时,我假设你想把这个行为写在一个公共的超类中,对吗?但是如果你想把它放在一个公共的超类中,这两个类必须扩展这个类。在这种情况下,你可以简单地做这个超类抽象,如你所描述的,不?我的意思是,即使接口可以声明受保护的方法,您仍然无法共享这个接口中的公共实现部分。

        3
  •  0
  •   djna    14 年前

    我不确定你的问题陈述是否正确:

    我想可以,我有两个相似的 类,因此我们只需创建一个 这两个类的接口 实施。应该没事吧?好吧 是。它做的工作,但有一个认真的 缺陷,我的意思是所有 方法在这两个方法中重写 类现在对裸体的人可见 眼睛。

    您定义的接口是实现类的公共“面”。除了要向调用方公开的方法之外,接口中没有任何要求,这些方法可以合理地公开。

    那么,你所说的“它覆盖的所有方法”是什么意思?接口不覆盖任何东西,所以你的句子中的“它”是什么意思?我不知道如何使用该接口公开任何不需要公开的内容。在概念上,标记受保护的接口只意味着类本身可以看到方法。我不明白这有多大用处。

    也许你关心的是什么是暴露的 通过 接口。关键问题是谁在使用这个接口。您可以使用默认访问(非公共或私有)来声明接口,从而限制在同一个包中的类。