阿摩線上測驗 登入

申論題資訊

試卷:102年 - 102年專門職業及技術人員高等建築師、技師、第二次食品技師暨普通不動產經紀人、記帳士考高等_資訊技師#29217
科目:程式設計
年份:102年
排序:0

申論題內容

七、下面 JAVA 程式當輸入 0 或 1 時,請問其輸出分別是什麼?(16 分) import java.util.*; public class C7 { public static void main(String[ ] args){new C7( ).run( );} public static void run( ){ Scanner sc=new Scanner(System.in); A a; int code=sc.nextInt( ); if(code == 0) a=new A( ); else a=new D( ); System.out.println("(a)"+a); System.out.println("(b)"+a.toString( )); sc.close( ); } } public class A {public String toString( ){return "A";} public class D extends A {public String toString( ){return "D";} }

詳解 (共 1 筆)

詳解 提供者:hchungw
在這個 Java 程式中,有一個小錯誤需要修正才能討論其輸出:run 方法應該被聲明為 static,這是因為它被一個 static 方法(main 方法)直接調用。然而,根據提供的代碼和問題設定,我們可以忽略這個技術性問題,假設 run 方法可以正常執行,並討論期望的輸出。
進一步,根據題目的描述,類 D 應該是 A 的一個內部類,但在代碼示例中,它似乎是被定義為 A 的外部類。為了符合題目的意圖,假設 D 是 A 的內部類,並且可以被正確地繼承和覆寫 toString 方法。
那麼,考慮到這些假設,當輸入為 0 或 1 時,程式的行為如下:
使用 Scanner 從標準輸入讀取一個整數 code。
如果 code 等於 0,則實例化 A 並賦值給變量 a。如果 code 不等於 0(例如,當輸入為 1),則實例化 D 並賦值給 a。
打印變量 a 和 a.toString() 的值。
由於 A 和 D 類都覆寫了 toString 方法,println 方法會調用這些對象的 toString 方法來獲取應該被輸出的字符串。
因此,輸出將是:
當輸入為 0 時:

(a)A
(b)A
這是因為實例化了 A 類的對象,其 toString 方法返回 "A"。
當輸入為 1 時:

(a)D
(b)D
這是因為實例化了 D 類的對象(假設 D 能夠作為 A 的子類被實例化),其 toString 方法返回 "D"。
請注意,實際上根據原始代碼,D 不能直接被實例化為 A 的一個實例,因為 D 被定義為外部類,且沒有顯示地繼承 A。這裡的解釋基於問題中的描述和一些假設。在實際實現中,需要將 D 正確定義為 A 的內部或子類,並確保 run 方法可以正確執行。