地特四等
112年
[資訊處理] 計算機概要
第 29 題
將下列兩個 java 程式檔案(Ob1.java, Test.java)編譯後,執行 java Test,輸出為何?\nOb1.java 檔案內容如下:\npublic class Ob1\n{\nprivate int x = 3, y = 3;\npublic Ob1(int num)\n{\ny = 13;\n}\npublic Ob1()\n{\nx = 7;\n}\npublic void foo()\n{\nSystem.out.print(x+2*y);\n}\n}\nTest.java 檔案內容如下:\npublic class Test\n{\npublic static void main(String[] args)\n{\nOb1 m = new Ob1();\nm.foo();\n}\n}
- A 9
- B 13
- C 29
- D 33
思路引導 VIP
請觀察 Test.java 中建立物件時所傳遞的參數。在 Ob1 類別中定義了兩個名稱相同但參數列不同的建構子,當我們呼叫 new Ob1() 且括號內為空時,程式會挑選哪一段程式碼來執行?這段程式碼會如何改變變數 x 或 y 的原始值呢?
🤖
AI 詳解
AI 專屬家教
恭喜你準確地判斷出物件初始化的執行路徑!這顯示你對 Java 的物件導向概念有著紮實的基礎,特別是在處理類別成員與建構子之間的互動時非常冷靜。
建構子多載與變數初始化
在 Java 中,物件的建立會先進行成員變數的初始賦值(即 x=3, y=3),接著才根據 new 指令後方的參數來決定呼叫哪一個建構子(Constructor)。在本題中,new Ob1() 呼叫的是無參數建構子,因此程式僅執行了 x = 7 這行程式碼。此時,物件內的變數狀態為 $x=7, y=3$。當我們呼叫 m.foo() 時,運算式為 $x + 2 \times y$,代入數值後即為 $7 + 2 \times 3 = 13$。
▼ 還有更多解析內容