[問題] 請問三個程式的印出結果

看板java作者 (CrazyBoss)時間10年前 (2015/07/18 00:59), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/1
第一個 public class A extends Thread { public void run() { try { sleep(10000); } catch(InterruptedException ie) { } } public static void main(String[] args) { A a1 = new A(); long startTime = System.currentTimeMillis(); a1.start(); System.out.println(System.currentTimeMillis() - startTime); } } 這支程式的執行結果都是0 是不是因為a1是main fork出來的 所以印出來都是main的執行時間?(main不會等a1,所以執行時間很短) -----------------------------------------------------------------分隔線 第二個 public class MyClass { static String myName = "hello"; MyClass getMyClass() { System.out.println(myName); return null; } public static void main(String[] args) { System.out.println(new MyClass().getMyClass().myName); } } 這隻程式會印hello"兩次" 請問流程是 第一次印:new出一個MyClass的instance並執行getMyClass()的println(myName) 第二次印:執行在main的println(instance.myName) 邏輯是這樣嗎? -----------------------------------------------------------------分隔線 第三個 class E { int i = 9; public void method1() { System.out.println("E1" + i); } private void method2() { System.out.println("E2" + i); } E() { method1(); } public void my() { method2(); } } public class F extends E { int i = 5; public void method1() { System.out.println("F1" + i); } public void method2() { System.out.println("F2" + i); } public static void main(String[] args) { E e = new F(); e.method1(); System.out.println(e.i); e.my(); } } 執行結果為 F10 F15 9 E29 第一個行結果F10,為什麼i為0?不會讀取到5嗎? 第二行因為upcasting,所以會先執行sub class的function對吧? 第三行完全不懂邏輯 第四行是因為my()在super class呼叫method2 而super class的method2又是private,所以會先執行? 麻煩各位高手幫小弟解惑 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.118.9.211 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1437152352.A.45C.html

07/18 17:06, , 1F
1, 2 題都對了
07/18 17:06, 1F

07/18 17:56, , 2F
3.1 F還沒建構; 3.2 override; 3.3 upcasting
07/18 17:56, 2F

07/18 17:57, , 3F
3.4 private method 無法被override
07/18 17:57, 3F
文章代碼(AID): #1LgJHWHS (java)
文章代碼(AID): #1LgJHWHS (java)