public abstract class ExternalScript extends Script {
String source;
public abstract void setSource(String file);
public abstract String getSource();
}
假设我有3个类从这个抽象类扩展而来。我的问题是,如果在抽象类中我改变了source的值,那么其他3个子类会看到这个变化吗?或者他们每个人都有自己的副本吗?我的一个朋友在晚餐时与我讨论这件事,我们想要真相。
答案 0 :(得分:1)
您希望保护该源变量,以便孩子们可以看到它。
您班级的每个孩子的实例都有自己的父数据。在这种情况下,更改一个不会影响任何其他因为String是不可变的。
但是,如果父引用是可变的,并且您使用相同的引用初始化每个子引用,那么所有三个引用都会看到它们的私有父值更改。
如果有问题的课程是可变的,您需要为每个实例制作防御性副本。
答案 1 :(得分:0)
不,这不是一成不变的。您创建的每个实例都会获得自己的值副本。
答案 2 :(得分:0)
您的班级ExternalScript
没有单独的实例,因此您的子类不会共享任何共同的内存,但ExternalScript
的内容相当于"合并"进入子类,所以不,改变一个子类实例的内容不会改变另一个子类的内容。