2012-09-21 59 views
10

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

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

OR

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

回答

7

abstract自有其目的。如果你想要其他类实现的一些类功能(override),那么你使用抽象。

如果它只是实用程序类,但你不希望其他类继承它,那么我会去final类。如果实用程序类只有static方法,则无法覆盖它们,因此在non-final类中也没有区别。

如果你想要其他类使用这个类的功能
+0

好的。谢谢。然后我应该用最后一堂课。 –

+5

您还应该添加一个私有的无参数构造函数,以便其他代码不会尝试灌输该类。 –

+0

谢谢,这将阻止对象创建.. –

4

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

+0

没有..通过抽象我想阻止对象的创建。 –

+0

是的,这是真的,但我不会说这是主要目的。如果创建一个抽象类,那么期望它将被其他类扩展,或者实例化为具有全部抽象方法重写的匿名类。 –

+0

ok jiri ......... –

2

使类成为final并添加一个私有构造函数。 (这就是类,如java.lang.Math使用)

public final class A { 
    private A() {} 

    public static void method() { 
    } 
} 
+0

感谢您的意见。 –

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 
} 
+0

感谢您的建议 –

0

这些都是一些指导,我发现:

  • 所有的方法必须是公共静态,使他们不能被重写。
  • 构造函数必须是私有的,所以它会阻止实例化。
  • 该类的最终关键字可防止子分类。
  • 类不应该有任何非最终或非静态类字段。

正如你所问,类名不能抽象(不可取) - >这意味着你打算在另一个类中实现它。如果你想阻止子分类,请使用final作为类名;如果您想防止实例化,请使用私有构造函数。

相关问题