Examples/Use-cases 的设计,其中 parent class 访问其 child 的静态字段
Examples/Use-cases of design in which parent class accesses its child's static field
编辑: linked duplicate 不回答这个问题,因为它是关于如何 它是可访问的。但我的问题是什么时候应该使用这样的设计或这样的设计的任何例子。
注意:任何寻找此问题答案的人都可以在评论部分向下滚动以查看 Thomas 最后与 java.lang.CharacterData
.[=22 相关的评论=]
一些标题相似的问题实际上讨论了child和parent中同名静态变量的用法。示例:Java | static vars in parent and child class | accessing the child var value from parent class
但我的问题是关于在 parent class.class 中访问 child 的静态字段的目的
class Child extends Parent {
static String someString = "test";
}
class Parent {
void someMethod() {
System.out.println(Child.someString);
}
}
这不是一个糟糕的设计吗?理想情况下,如果 Parent
中需要 someString
,那么它应该是 Parent
中的字段,而不是 Child
.
有没有use-cases/examples什么时候可以使用这种方法?
基于托马斯的 :
此模式可用于 return 来自父 class 中方法的特定实现。也就是说,当父 class 包含一个静态工厂方法时,它很有用 return 是几个子 class 之一的单例实例。
JDK 中可用的示例是 java.lang.CharacterData
。这是一个抽象 class 由其他 8 个 classes 扩展(CharacterData00
、CharacterData01
、...)所有这些实现 classes 是 non-public 和 singleton 因此包含一个 static final instance
变量。由于这些实现是非 public(默认访问),因此不应直接访问它。因此,CharacterData
包含一个静态工厂方法 of
,return 是适当的实现。
编辑: linked duplicate 不回答这个问题,因为它是关于如何 它是可访问的。但我的问题是什么时候应该使用这样的设计或这样的设计的任何例子。
注意:任何寻找此问题答案的人都可以在评论部分向下滚动以查看 Thomas 最后与 java.lang.CharacterData
.[=22 相关的评论=]
一些标题相似的问题实际上讨论了child和parent中同名静态变量的用法。示例:Java | static vars in parent and child class | accessing the child var value from parent class
但我的问题是关于在 parent class.class 中访问 child 的静态字段的目的
class Child extends Parent {
static String someString = "test";
}
class Parent {
void someMethod() {
System.out.println(Child.someString);
}
}
这不是一个糟糕的设计吗?理想情况下,如果 Parent
中需要 someString
,那么它应该是 Parent
中的字段,而不是 Child
.
有没有use-cases/examples什么时候可以使用这种方法?
基于托马斯的
此模式可用于 return 来自父 class 中方法的特定实现。也就是说,当父 class 包含一个静态工厂方法时,它很有用 return 是几个子 class 之一的单例实例。
JDK 中可用的示例是 java.lang.CharacterData
。这是一个抽象 class 由其他 8 个 classes 扩展(CharacterData00
、CharacterData01
、...)所有这些实现 classes 是 non-public 和 singleton 因此包含一个 static final instance
变量。由于这些实现是非 public(默认访问),因此不应直接访问它。因此,CharacterData
包含一个静态工厂方法 of
,return 是适当的实现。