JAVA型別的問題

壹頁書發表於2014-03-22

  1. public class Test {
  2.     public void test(Object obj) {
  3.         System.out.println("Object");
  4.     }

  5.     public void test(String str) {
  6.         System.out.println("String");
  7.     }

  8.     public static void main(String[] args) {
  9.         Test t = new Test();
  10.         t.test(null);
  11.     }
  12. }

求輸出的結果。
我一開始認為會在編譯期間報異常,但是回家測試的結果居然是"String"。
確實有點意思。
如果再增加一個類似的方法,就可以出現編譯期異常了。


函式過載的兩個型別有繼承關係,如果不能確定呼叫哪個函式的時候,都會交給子類。
函式過載有三個型別,其中兩個繼承自一個類,那麼就徹底不能確定呼叫的函式了。所以編譯異常。


  1. public class Test {
  2.     public void test(Animal animal) {
  3.         System.out.println("Animal");
  4.     }

  5.     public void test(Cat cat) {
  6.         System.out.println("Cat");
  7.     }
  8.     
  9.     public static void main(String[] args) {
  10.         Test test = new Test();
  11.         test.test(null);
  12.         //顯示 Cat
  13.     }
  14. }

  15. class Animal {
  16. }

  17. class Cat extends Animal {
  18. }
再增加一個Dog型別,就不能預設選擇子類的方法了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1127386/,如需轉載,請註明出處,否則將追究法律責任。

相關文章