4

你能帮我如何创建一个不可继承且行为应该是静态的类(意味着我们不应该能够创建它的实例)。我需要这个类来存储常量值。谢谢。

4

8 回答 8

9
public final class MyClass { 
    private MyClass() { }
}

final关键字使其不可继承,并且构造构造函数将private有助于阻止它被实例化。

于 2012-10-01T05:17:02.017 回答
6

你可以使用final关键字来类不能被继承。但我建议你使用Enums. Enums不能被继承,每个常量值只存在一个实例。您还可以使用enums.

public enum DaysOfweek
{
    SUNDAY,MONDAY.....
}

您可以在此处阅读有关枚举的更多信息Enum Types

于 2012-10-01T05:19:47.407 回答
4

为什么不使用具有几个静态和最终变量的接口?

于 2012-10-01T05:16:41.950 回答
3
  • 对于第一种情况,您可以使用final类,因为它们不能被继承..
  • 对于您的第二种情况,您可以使用interface,它们非常适合存放Constants

但是你不能把它们都放在一起(因为有一个interface不能是implemented没有意义的)..
所以,最好的办法是你可以将两者的属性混合在一个类中..你可以有一个final class变量public static final,因为这就是在接口中创建一个变量constant,将服务于constants..

public final class A {
    public static final int YOUR_CONST = 5;

}

如果您不想创建此类的实例,则可以private 0-arg constructor在其中包含一个..

public final class A {
    public static final int YOUR_CONST = 5; 

    private A() {}

}
于 2012-10-01T05:17:49.753 回答
2

将其声明为 final 将不允许其他类扩展它,并将其构造函数设为私有,因此其他人(除了您自己的类)将无法实例化它:

public final class MyClass {

    private MyClass() {
        // Private so noone else can instantiate this
    }

}
于 2012-10-01T05:21:22.693 回答
2

下面是包含常量值的类的示例:

public final class Trial // it is the FINAL
{
    private static final int CONSTANT_VALUE = 666;

    private Trial() // it is PRIVATE instead of PUBLIC
    {
    }

    public static int getConstantValue()
    {
       return CONSTANT_VALUE;
    }
}

以下是如何测试上述类的示例:

public class Bully //extends Trial ////"extends" WILL NOT COMPILE
{
    public static void main(String[] args)
    {
        //Trial trial = new Trial(); ////"new Trial()" WILL NOT COMPILE

        // The only thing can be done is getting a constant value from "Trial"
        int acquiredValue = Trial.getConstantValue();
        System.out.println(acquiredValue);
    }
}

希望有帮助:))

于 2012-10-01T05:34:08.503 回答
1
public final class MyClass {
    public static string MY_STRING;
    public static int MY_INT;

    private MyClass() {}
}
于 2012-10-01T05:18:38.157 回答
1

final :使一个类最终,这意味着这个类不能被进一步继承。static :如果所有方法都是静态的,则不需要创建此类的实例。并且在行为上应该是静态的。

单例模式:如果您的所有方法都不是静态的并且您不想创建多个实例,那么您可以将构造函数设为私有并在类中保留一个类对象的变量。如果它为空,则创建一次,如果不为空,则始终返回相同的实例。

谢谢

于 2012-10-01T05:23:52.970 回答