我已多次阅读,例如此处 https://stackoverflow.com/a/589885/1420898, 静态成员是一个糟糕的OO设计,应该避免。它也发生在我正在进行的项目中;他们使用Interfaces +实现的类似乎应该是静态类,因为我们只是使用它的函数来对其他类执行一些操作。
我的问题是,为什么我们应该使用接口而不是静态类?
答案 0 :(得分:1)
在使用静态类与接口方面,静态类将用作帮助程序,即它将是类的单个实例,而通过接口实例化的类可能具有许多不同的实现,并且通常用于多个实例类。当您只希望类执行某些操作时,您可以使用静态类,而不是存储特定于该调用的状态信息。一个接口将更多地用于一般的面向对象编程。
当我们希望在没有实例化或使用其对象的情况下使用对象时,基本上使用静态类。通常我们将常用函数或在静态类中重复使用的函数放在一起。将它们放在简单的类中将会产生大量的开销,因为每次创建类对象时,它都将为我们拥有的所有内容分配内存。因此,它通过使用静态类来减少开销。
当与界面进行比较时没有这样的比较它取决于你的要求,如果要求如上所述那么你肯定会去静态类而不是接口但是如果我们有这样的要求我们有几个类我们想要他们应该遵循这样的模式或者在它们的对象形成之前实现这些东西然后我们更喜欢接口而不是静态类。
此外,如果我的函数是常见的但具有与不同类相对应的不同实现,那么我将再次使用接口而不是静态类。
答案 1 :(得分:0)
首先,我想说,java中有 NO 静态类。好吧,除了静态内部类。我认为内心阶级绝对不是你在那里的意思。
您可能想说,一个不允许使用静态方法实例化的类。与Util类一样。即apache常见的StringUtil ...
Util类中的静态方法仅提供一个实现。更重要的是,它不应该知道有关传入的Object的详细逻辑。
举个例子,你有接口:
interface Animal{
int totalLegs(); //here you get the animal object has how many legs
}
然后你有Bird,Horse,Warm,Fly类,实现Animal界面。他们有不同的意图。总腿。这些实现与Animal(Bird,Horse ......)类型的详细逻辑有关,因此它应该转到界面。
并说每个Animal都有一个字段Date birthday;
,您希望将Date转换为具有自定义模式的字符串。您可以创建一个类,即DateUtil和方法public static String getDateString(Date d, String pattern){...}
也许你可以描述一下接口/ impl。在你的项目中。然后我们可以看看是否更好地去Util课程。