从 superclass 方法访问 sub class 静态属性
Accessing sub class static attributes from superclass method
我将举一个简单的例子,因为从那个角度看并不那么复杂。以下示例的输出将为空:
abstract class SuperClass { // it doesn't need to be abstract but that's my case now
// needs to be static
static String var_name = null;
void method(){
System.out.println(var_name);
}
}
class subclass{
// needs to be static
static String var_name = "I need to print this"
void otherUnrelatedMethod(){
method(); // calling method() here gives me null
}
}
我知道有两种选择可以实现我想要的:
我只需将 var_name 作为 method() 的参数传递即可轻松实现此目的,这是我现在正在使用的选项。
我也可以覆盖 method(),但是这样做会带来更多的工作,因为有很多子类,而且 method() 实际上非常大。
除了这两个还有别的选择吗?即:如果我可以使用子类类型 <S extends SuperClass>
的边界来获得理想的效果。甚至使用反射,虽然我听说它会使程序很慢
这是解决此类问题的一个很好的模式:
abstract class SuperClass {
String var_name() {
return null;
}
void method() {
System.out.println(this.var_name());
}
}
class subclass extends SuperClass {
@Override
String var_name() {
return "I need to print this";
}
void otherUnrelatedMethod() {
method();
}
}
- 首先,superclass没有subclasses的信息。这意味着您不能从 super class.
调用 sub class 函数
- 其次,
static
成员存在于 class
中,而不是在实例中。这是不可能的,但如果一个 sub class 覆盖任何超级 class 静态成员,其他 sub classes 将成为受害者。
你最好使用 returns var_name
和 @Override
子 classes 中的函数。
我将举一个简单的例子,因为从那个角度看并不那么复杂。以下示例的输出将为空:
abstract class SuperClass { // it doesn't need to be abstract but that's my case now
// needs to be static
static String var_name = null;
void method(){
System.out.println(var_name);
}
}
class subclass{
// needs to be static
static String var_name = "I need to print this"
void otherUnrelatedMethod(){
method(); // calling method() here gives me null
}
}
我知道有两种选择可以实现我想要的:
我只需将 var_name 作为 method() 的参数传递即可轻松实现此目的,这是我现在正在使用的选项。
我也可以覆盖 method(),但是这样做会带来更多的工作,因为有很多子类,而且 method() 实际上非常大。
除了这两个还有别的选择吗?即:如果我可以使用子类类型 <S extends SuperClass>
的边界来获得理想的效果。甚至使用反射,虽然我听说它会使程序很慢
这是解决此类问题的一个很好的模式:
abstract class SuperClass {
String var_name() {
return null;
}
void method() {
System.out.println(this.var_name());
}
}
class subclass extends SuperClass {
@Override
String var_name() {
return "I need to print this";
}
void otherUnrelatedMethod() {
method();
}
}
- 首先,superclass没有subclasses的信息。这意味着您不能从 super class. 调用 sub class 函数
- 其次,
static
成员存在于class
中,而不是在实例中。这是不可能的,但如果一个 sub class 覆盖任何超级 class 静态成员,其他 sub classes 将成为受害者。
你最好使用 returns var_name
和 @Override
子 classes 中的函数。