13

对于具有公共静态的所有方法的实用程序类,正确的方法是什么。
我应该使用最终类还是抽象类?
请给建议。
例如:

public final class A{ 
    public static void method(){
        /* ... */
    }
}

或者

public abstract class A{
    public static void method(){
        /* ... */
    }
}
4

6 回答 6

11

abstract有自己的目的。如果您希望其他类 ( ) 实现某些类功能,override则使用抽象。

如果它只是实用程序类,但您不希望其他类将其子类化,那么我会选择final类。如果实用程序类只有static方法,那么无论如何您都不能覆盖它们,因此将它们non-final也放在类中并没有什么区别。

于 2012-09-21T21:36:55.607 回答
8

创建实用程序类的最佳方法。如果您不希望其他类继承它。

//final, because it's not supposed to be subclassed
public final class AlertUtils 
{ 

// private constructor to avoid unnecessary instantiation of the class
    private AlertUtils() {
    }

  public static ..(){}//other methods
}
于 2015-07-09T10:51:47.093 回答
4

final这里比 更有意义abstract。通过将类标记为final,您禁止扩展类。另一方面,将类标记为abstract相反,因为没有子类的抽象类没有多大意义。所以预计会延长。

于 2012-09-21T21:39:36.600 回答
3

使类最终并添加一个私有构造函数。(这就是喜欢java.lang.Math使用的类)

public final class A { 
    private A() {}

    public static void method() {
    }
}
于 2015-06-25T20:25:58.173 回答
1

如果您希望其他类使用此类的功能,则将其设为抽象,否则将其设为Final

于 2012-09-21T21:39:04.983 回答
0

These are some guidelines I've found:

  • All methods must be public static, so that they cannot be overridden.
  • Constructor must be private, so it'll prevent instantiation.
  • Final keyword for the class prevents sub-classing.
  • Class should not have any non-final or non-static class fields.

As you've asked, the class name cannot be abstract (not advisable) -> Which means you are planning to implement it in another class. If you want to prevent sub-classing, use final for the class name; If you want to prevent instantiation, use a private constructor.

于 2017-03-08T15:45:40.093 回答