我屢次搜索谷歌&堆棧溢出的直接答案,但沒有找到。這是因爲我的問題很容易回答,或者以前沒有人問過。經過許多問題讀書或多或少提的這個問題後,我得出以下結論:有沒有什麼辦法可以讓父類的實例變量直接由其子類(子類)引用?
一個父類的對象和兒童類的對象是相互完全獨立,這意味着兒童類的對象不創建一個單獨的父類對象,而是一個自包含的對象。
通過利用反射,您可以使用一種方法(許多人重新發布而不歸因於上載代碼的在線教程),該方法將一個對象的超類的所有字段(如果有的話)複製到另一個。這個方法是一次性的,並且實際上並沒有改變變量的引用(這意味着如果2個對象,一個父類和一個子類,通過該方法,即使父類的變量內容將被複制到子類,如果父類的變量更改子類的變量將保持不變)。
通過利用靜態變量和變量變量的方法,這些變量在運行時在所有類中共享,這意味着所有對象共享相同的變量。這不是我想要達到的。易變變量並不是一個解決方案,因爲它們主要被實現Runnable用於它們的Thread實例的類所使用(並且,我認爲,由於它們存儲在RAM中而不是通過CPU傳遞,所以在所有類中共享)。
我們實際上解釋我的問題,我想達到的目標是有一定的少兒班從單一的父類幹,而且有多個這樣的「我們的家庭卻更」。例如,假設父類存儲包含名稱的字符串。我想要3個孩子從父母的字符串名稱是「喬治」和其他3個孩子源於其父母的字符串名稱是「尼克」。當存儲在「喬治」父類中的字符串從「喬治」變爲「帕特里克」時,我希望將它改爲它的孩子,而不是「尼克」的孩子。
可以這樣做嗎?
如果這是一個新手問題,我非常抱歉,但我在單身大學的第一年,我們仍在學習如何循環,功能等工作。
編輯:
代碼展示我的例子:
public class Parent {
private String name;
public Parent(String name) {
this.name = name;
}
public void changeName(String newName) {
name = newName;
}
public String getName() {
return name;
}
public void complexMethod() {
System.out.println(name);
}
//Multiple other complex methods here.
}
public class Child extends Parent {
public Child(Parent p) {
//Code which gets the memory references from the p Parent and stores them.
}
}
public class mainApp {
public static void main(String[] cmdArgs) {
Parent George = new Parent("George");
Parent Nick = new Parent("Nick");
Child a = new Child(George);
Child b = new Child(George);
Child c = new Child(Nick);
George.changeName("Patrick");
System.out.println(a.getName());//Prints "Patrick"
System.out.println(b.getName());//Prints "Patrick"
System.out.println(c.getName());//Prints "Nick"
a.complexMethod();//Calls complex method of Parent class with the String "Patrick" stored on the Parent class.
c.complexMethod();//Calls complex method of Parent class with the String "Nick" stored on the Parent class.
}
}
編輯2:
什麼,他們要求我們做,直接翻譯詞對詞與損失儘可能少的一個片段作爲上下文可能:
「服務提供商」類「提供兩種形式的服務,移動 互聯網和移動蜂窩網絡。此外,蜂窩網絡被進一步分成兩部分,一個蜂窩網絡,其基於用戶已簽署卡合同 的事實以及基於用戶 已經簽署了一個事實而起作用的蜂窩網絡移動合同。所有的服務都存儲在 「收藏」(他們是直接引用到ArrayList的,因爲他們 問導入特定庫)是一流的「服務提供商 」內。 (關於功能的詳細信息在這裏)
事實是,服務提供商構造函數接受和存儲包含服務提供者的名稱的String,這意味着如果我們要爲同一個供應商,我們創建多種類型的服務浪費國際海事組織不好編程的記憶。 (實際上他們要求我們存儲多種類型的服務爲同一供應商)
您看起來像是一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),您在那裏綁定以獲得使用繼承的代碼解決方案,而最好的解決方案可能根本不使用繼承,而是組合。你所說的這些「孩子」應該被看作是一個集合樹中的節點對象,而不是子類。 –
他只是學習循環,不要打他的作文:p – Neilos
@ neilos:或許,但你必須承認,他吠叫錯了樹。這不是通過繼承來解決的。 –