[問題] 一個簡單的變數繼承問題

看板java作者 (回憶真美麗)時間12年前 (2013/04/12 16:52), 編輯推噓1(106)
留言7則, 3人參與, 最新討論串1/1
大家好,不好意思,我想請問一下一個簡單的變數繼承問題 我想要做一個測試確認 就是父類別原本有的類別變數,假如是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)

04/12 16:57, , 1F
你講的只有當你在 CB 裡"也"宣告 int var1; 才成立
04/12 16:57, 1F

04/12 17:00, , 2F
而這個時候父類別的那個 var1 就只能經由 super.var1 存取
04/12 17:00, 2F

04/12 17:01, , 3F
如果沒有的話 在 CB 裡用 var1 用的就是父類別的那個變數
04/12 17:01, 3F

04/12 17:05, , 4F
嗯嗯 好像的確是 我在CB也宣告int var1 就成功分開來了
04/12 17:05, 4F

04/12 17:06, , 5F
所以在我的例子中var1和super.var1其實是同一個變數吧?
04/12 17:06, 5F

04/12 17:07, , 6F
謝謝一樓 ^^
04/12 17:07, 6F

04/12 17:19, , 7F
要先弄清楚物件生成的流程喔~這樣你在設計會比較清楚
04/12 17:19, 7F
文章代碼(AID): #1HPyiphi (java)