2014-09-29 60 views
0
public abstract class ExternalScript extends Script { 

    String source; 

    public abstract void setSource(String file); 

    public abstract String getSource(); 
} 

可以說我有3個類從這個抽象類延伸出來。我的問題是,如果在抽象類本身中,我更改了源代碼的價值,那麼其他3個子類會看到此更改嗎?還是他們每個人都有自己的副本?我的一個朋友在晚餐時和我一起討論這個問題,我們想要真相。Java抽象類 - 是否每個類都得到變量的副本

+1

當您嘗試執行此操作的程序時發生了什麼? – 2014-09-29 20:27:55

回答

1

您會希望使該源變量受到保護,以便孩子可以看到它。

你班的孩子的每個實例都有自己的父母數據。在這種情況下改變一個不會影響任何其他的,因爲String是不可變的。

但是,如果父引用是可變的,並且您使用相同的引用初始化了每個子引用,那麼所有三個都會看到它們的私有父值更改。

如果所討論的類是可變的,則需要爲每個實例製作防禦副本。

0

不,它不是靜態的。您創建的每個實例都獲取其自己的值副本。

0

您的類沒有單獨的實例ExternalScript因此您的子類不共享任何公用內存,但ExternalScript的內容相當「合併」到子類中,因此否,更改一個子類實例的內容不會更改另一個的內容。