[英]Java - How to make changeable (by subclass) static fields of a superclass, but protect them from i.e. main()?
如何保护某些超类的静态字段不被更改(例如在main方法中),同时通过子类中的setter保持这种可能性。 据我所知,将其设为私有不会成功,因为私有静态字段不是子类的一部分。 我唯一能理解的就是使它们受到保护,并将那些类(没有主类)包含在包中。 有没有更简单的解决方案?
class Main{
public static void main(String[] args){
Foo.precious = "nothingness";
}
}
class Foo{
static String precious = "Precious data";
}
class Bar extends Foo{
Foo.precious = "More precious";
}
而且,如果我在Foo类中的珍贵对象上添加了一个私有修饰符,那么我将保护它不受main()的影响,但是也会失去在子类中对其进行更改的能力。
没有访问修饰符可使成员/静态/方法对子类可见,但对包不可见。
这取自Oracle文档
当期望子类覆盖其超类的行为时,您必须遵守OOD规则:最好使它们成为非静态变量,以便子类可以重新定义它们并覆盖其公共获取器:
class Foo{
private String precious = "Precious data";
public String getPrecious() { return precious; }
}
class Bar extends Foo{
private String precious = "more precious";
@Override
public String getPrecious() { return precious; }
}
class Main{
public static void main(String[] args){
Foo.precious = "nothingness"; // Compilation error: field precious is not visible.
Foo.setPrecious("x"); // Compilation error: No such public method.
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.