你能帮我如何创建一个不可继承且行为应该是静态的类(意味着我们不应该能够创建它的实例)。我需要这个类来存储常量值。谢谢。
8 回答
public final class MyClass {
private MyClass() { }
}
final
关键字使其不可继承,并且构造构造函数将private
有助于阻止它被实例化。
你可以使用final
关键字来类不能被继承。但我建议你使用Enums
. Enums
不能被继承,每个常量值只存在一个实例。您还可以使用enums
.
public enum DaysOfweek
{
SUNDAY,MONDAY.....
}
您可以在此处阅读有关枚举的更多信息Enum Types
为什么不使用具有几个静态和最终变量的接口?
- 对于第一种情况,您可以使用
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() {}
}
将其声明为 final 将不允许其他类扩展它,并将其构造函数设为私有,因此其他人(除了您自己的类)将无法实例化它:
public final class MyClass {
private MyClass() {
// Private so noone else can instantiate this
}
}
下面是包含常量值的类的示例:
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);
}
}
希望有帮助:))
public final class MyClass {
public static string MY_STRING;
public static int MY_INT;
private MyClass() {}
}
final :使一个类最终,这意味着这个类不能被进一步继承。static :如果所有方法都是静态的,则不需要创建此类的实例。并且在行为上应该是静态的。
单例模式:如果您的所有方法都不是静态的并且您不想创建多个实例,那么您可以将构造函数设为私有并在类中保留一个类对象的变量。如果它为空,则创建一次,如果不为空,则始终返回相同的实例。
谢谢