2010-10-21 113 views
1

我想创建一个接口,其方法被保护或只对实现它的类可见。Java中受保护的方法?

问题是这样的。我有两个类或多或少做了完全相同的事情,但具有不同的参数和行为,但它采取的实际步骤是相同的​​。

我在想好,我有两个类似的类,所以我们只需创建一个接口,这两个类都可以实现。应该没事吧?好吧。它完成了这项工作,但有一个严重的缺陷,所有和我的意思是,现在在肉眼可以看到它在这两类中被超越的所有方法。

它们可以按照“公共”的定义进行访问。有封装:(

我想到的另一种解决方案是使用抽象类,但等待,你只能扩展一个抽象类,我正在使用的两个类已经扩展一个类(在我的情况下是一个Android服务类),所以

回答

3

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

+0

我想我们可能会在这里获得冠军。欢呼会给这个去 – jonney 2010-10-21 13:09:55

3

这是正确的,interface是类接口的定义,因此你不应该担心实现的细节,比如接口是如何实现的,甚至不是被保护的方法。

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

虽然我不确定我在这里了解您的问题。当你说这些类在许多方面表现相同时,我认为你想在一个普通的超类中编写这种行为,对吧?但是如果你想把它放在一个普通的超类中,这两个类必须扩展这个类。在那种情况下,你可以简单地做这个超类抽象,如你所描述的,不是?我的意思是即使一个接口可以声明受保护的方法,你仍然不能在这个接口中共享通用的实现部分。

+0

实现方式会有所不同,但实际的方法调用将完全相同,即理想使用接口。例如,我有一个名为parseXML()的方法,这两个类都需要解析一些xml数据,但两者的xml方案不同 – jonney 2010-10-21 11:39:19

+3

“接口”描述了定义类接口的“public”方法,以供其他类使用。 ''接口'不适合你的用例 - 你试图指定私有/受保护的实现细节。 – 2010-10-21 12:09:16

0

我不知道,你的问题statment是正确的:

我想确定我有两个类似 类,以便让刚刚创建 接口,这两个类 实现。应该没事吧?那么它 是。它做的工作,但有一个严重的 缺陷,我和所有的 方法,它在这两个 类现在是可见的裸体 眼睛。

您定义的接口是实现类的公共“面”。没有要求接口以外的任何东西,而不是你想暴露给调用者的方法,这些可以合理公开。

那么你的意思是“所有被覆盖的方法”接口不会覆盖任何东西,所以句子中的“it”是什么。我没有看到如何使用接口公开任何不需要暴露的东西。在概念标记接口保护意味着类本身可以看到方法。我不明白这有多大用处。

也许你关心什么是接口。关键问题是谁在使用该接口。你可以声明接口的默认访问权限(既不是公共也不是私有的),因此限制在同一个包中的类。