看板 java 關於我們 聯絡資訊
大家好,不好意思,我想請問一下一個簡單的變數繼承問題 我想要做一個測試確認 就是父類別原本有的類別變數,假如是var1 子類別繼承後,子類別的物件obj內,應該有var1、super.var1兩塊獨立的變數吧? 但是為什麼我做了以下測試 我發現我改了obj內的super.var1,obj內的var也會一起改變? 難道是var1、super.var1其實是同一個變數嗎? 萬分感謝! source code: import java.lang.*; public class class_130412 { public static void main(String args[]) { CB obj = new CB(); obj.show(); } } class CA { public int var1; public CA() { System.out.println("父類別建構子建構中"); var1=10; } } class CB extends CA // 子類別CB繼承自類別CA { public CB() { System.out.println("子類別建構子建構中"); var1=20; super.var1=30; } public void show() { System.out.println("var1=" + var1); System.out.println("super.var1=" + super.var1); } } 結果: 父類別建構子建構中 子類別建構子建構中 var1=30 super.var1=30 問題1: 為什麼super.var1=30 會一起動到var1的數值? 問題2: 如果我把super.var1=30註解掉 結果是 父類別建構子建構中 子類別建構子建構中 var1=20 super.var1=20 super.var1不應該是要維持同樣是10嗎? 謝謝指點! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.113.229 ※ 編輯: pluseus 來自: 140.109.113.229 (04/12 16:58)
LPH66:你講的只有當你在 CB 裡"也"宣告 int var1; 才成立 04/12 16:57
LPH66:而這個時候父類別的那個 var1 就只能經由 super.var1 存取 04/12 17:00
LPH66:如果沒有的話 在 CB 裡用 var1 用的就是父類別的那個變數 04/12 17:01
pluseus:嗯嗯 好像的確是 我在CB也宣告int var1 就成功分開來了 04/12 17:05
pluseus:所以在我的例子中var1和super.var1其實是同一個變數吧? 04/12 17:06
pluseus:謝謝一樓 ^^ 04/12 17:07
swpoker:要先弄清楚物件生成的流程喔~這樣你在設計會比較清楚 04/12 17:19