Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:接口是比静态类更好的OO设计吗?_Java_Interface_Static - Fatal编程技术网

Java:接口是比静态类更好的OO设计吗?

Java:接口是比静态类更好的OO设计吗?,java,interface,static,Java,Interface,Static,我已经读了好几遍了,比如这里 , 静态成员是一个糟糕的OO设计,应该避免。这也发生在我正在从事的项目中;他们对我认为应该是静态类的类使用了接口+实现,因为我们只使用它的函数对其他类执行一些操作 我的问题是,为什么我们应该在静态类上使用接口?就使用静态类与接口而言,静态类将用作助手,即它将是类的单个实例,而通过接口实例化的类可能有许多不同的实现,并且通常用于多个实例类。当您只想让一个类执行某些操作,而不存储特定于该调用的状态信息时,可以使用静态类。接口将更多地用于一般的面向对象编程 静态类基本上是

我已经读了好几遍了,比如这里 , 静态成员是一个糟糕的OO设计,应该避免。这也发生在我正在从事的项目中;他们对我认为应该是静态类的类使用了接口+实现,因为我们只使用它的函数对其他类执行一些操作


我的问题是,为什么我们应该在静态类上使用接口?

就使用静态类与接口而言,静态类将用作助手,即它将是类的单个实例,而通过接口实例化的类可能有许多不同的实现,并且通常用于多个实例类。当您只想让一个类执行某些操作,而不存储特定于该调用的状态信息时,可以使用静态类。接口将更多地用于一般的面向对象编程

静态类基本上是在我们希望在不实例化或创建对象的情况下使用对象时使用的。通常情况下,我们放置公共函数或在静态类中重复使用的函数。因为将它们放在简单类中会有很多开销,因为每次形成类对象时,它都会将内存分配给我们所有的对象。因此,它通过使用静态类来减少开销

当与接口进行比较时,虽然没有这样的比较,但这取决于您的需求,如果需求像上面那样,那么肯定你会选择静态类而不是接口,但是如果我们有这样的需求,我们有几个类,我们希望他们应该遵循这样的模式,或者在他们的对象形成之前实现这些东西,那么我们会选择接口而不是静态类


此外,如果我的函数是通用的,但它们有不同的实现,对应于不同的类,那么我会再次选择接口而不是静态类。

首先,我会说,java中没有静态类。好吧,除了静态内部类。我认为内在阶级绝对不是你上面说的意思

您可能想说,一个不允许实例化的类,使用静态方法。比如Util类。i、 ApacheConommonStringUtil

Util类中的静态方法只提供一个实现。更重要的是,它不应该知道关于传入对象的详细逻辑

举个例子,你有一个界面:

    interface Animal{
   int totalLegs(); //here you get the animal object has how many legs 
}
然后你有鸟,马,暖,飞类,实现动物接口。它们有不同的impl。总共的。这些实现和动物类型(鸟、马等)的详细逻辑相关,所以应该转到接口

并说每只动物都有一个字段
日期生日要将日期转换为具有自定义模式的字符串。您可以创建一个类,即DateUtil和方法
公共静态字符串getDateString(日期d,字符串模式){…}


也许你可以描述一下界面/impl。在你的项目中。然后我们可以看看使用Util类是否更好。

“静态内部类”在术语上是矛盾的“静态嵌套类”正常。根据定义,“内部类”是非静态的。请参阅JLS。