2011-09-14 35 views
0

我有一个有5种方法的类。这些方法中的3个必须由同一个包中的其他类打开,2个必须由另一个包中的其他类打开。什么是更好的:与公共/保护接口或玩耍?

为例:

void setTimeArray(int[] zeitArray) { 
    this.timeArray = timeArray ; 
} 

public int[] getTimeArray() { 
    return timeArray ; 
} 

现在我不知道我应该做什么:

  • 我应该做的3种方法protected和其他2 public
  • 我应该为2种方法制作一个接口吗?

那么,为什么我的应用程序的性能会更干净,更好?

回答

2

您似乎对public,protected等的使用感到困惑。您班级的公共方法包括您班级的公共接口。当你设计你的班级时,你决定你想向你的班级的消费者展示哪些功能。

您应该只使方法受保护IMO多态性。如果你正在使一个方法受到保护,以使包中的另一个类可以获得内部等,那么它可能是一个糟糕的类设计。你应该而不是做一个方法保护,因为没有其他类正在使用它现在。如果将来需要从其他班级使用它,则必须更改班级。

如果没有多个实现该接口的具体类,则不需要创建接口。

如果你得到了OOP范例,一个类的公共接口应该很自然地流动。该决定应该涉及更多关于如何来揭露功能比什么来揭露。

2

如果有两个方法共有的单个“主题”,但不是其他3个,请考虑将该类分成两个不同的类。如果你这样做,考虑将这个类用2种方法移到它将被使用的包中(如果它对于包的“主题”是有意义的话)。

在任何情况下,使用最低的可见性,可以让你做你想做的事情。此外,更喜欢默认的可见性保护(不同之处在于受保护像默认,但也允许不同的包中的子类来访问这些方法)。

+0

我有setter和getter,其他包只应该使用getter – Neifen

+1

@neifen:然后只是使用可见性。公共获得者,默认设置者。 –

2

由于类的3个方法是由同一包,那么没有必要有一个保护访问修饰符的类访问,而你可以使用默认受保护应在您希望您的子类访问方法时使用。

和有关公共方法,你可以去界面,如果你认为你有拥有它实现这两个方法的相似课程。所以通过界面你可以把它们联系起来。

1

你应该只要你觉得写的界面,你可以使用或需要它;)

除了接口:保持非接口方法protected是你的问题的有效解决方案。

不关心性能。根据接口进行编程或使用访问修饰符(如public,protected或private)不会影响性能。

+0

使非接口方法包私有(默认)也可以工作。无需使它们受到保护(即使在包外也允许从子类访问)。 – Thilo