实用工具类 - 正确的方法是什么?

时间:2012-09-21 21:35:45

标签: java class

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

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

OR

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

6 个答案:

答案 0 :(得分:8)

abstract有其自己的目的。如果您想要其他类(override)实现的某些类功能,那么您可以使用abstract。

如果它只是实用程序类,但你不希望其他类继承它,那么我会选择final类。如果实用程序类只有static方法,那么任何方法都无法覆盖它们,所以在non-final类中使用它们也没有区别。

答案 1 :(得分:6)

  

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

//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
}

答案 2 :(得分:4)

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

答案 3 :(得分:3)

使类最终并添加私有构造函数。 (这是像java.lang.Math这样的类使用)

public final class A { 
    private A() {}

    public static void method() {
    }
}

答案 4 :(得分:1)

如果您希望其他课程使用此课程的功能,请将其设为抽象,否则将其设为最终

答案 5 :(得分:0)

这些是我发现的一些指导原则:

  • 所有方法都必须是公共静态的,因此无法覆盖它们。
  • 构造函数必须是私有的,因此它会阻止实例化。
  • 该类的最终关键字可防止进行子类化。
  • 类不应包含任何非final或非静态类字段。

正如您所问,班级名称不能是抽象的(不可取) - >这意味着您计划在另一个类中实现它。如果要防止子类,请使用final作为类名;如果要阻止实例化,请使用私有构造函数。