`
zhangsk
  • 浏览: 30442 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

How does Java compiler resolve the ambiguity to decide which

阅读更多
转http://bobcat.webappcabaret.net/javachina/faq/01.htm#lan_Q120
Q. How does Java compiler resolve the ambiguity to decide which methods to call?
A:
In the following example, four test() methods, if we pass ambiguous \b{null} to the test, which one should (will) be called? The 3 on top has super/subclass/sub-subclass relationship. The most specific one (down hierarchy) will be called. The 4th with String as a parameter, but it is a sibling of Tester. Ambiguity compile time error results.

package com.zsk.testnull;

class Tester { 
	  void test(Object s)    { System.out.println ("Object version");    } 
	  void test(Tester s)    { System.out.println ("Tester version");    } 
	  void test(SubTester s) { System.out.println ("SubTester version"); } 
	 
	  // Not compilable any more if you uncomment the line 
	  // since String and Tester are siblings
//	   void test(String s) { System.out.println ("String version"); } 
	 
	  public static void main (String args[]) { 
	    Tester c = new Tester (); 
	    // Ambiguous, the most specific one which fit will be call
	    c.test (null);         // SubTester version 
	    c.test (new Object()); // Object version 
	  } 
} 
	 
class SubTester extends Tester{ 
} 


"The informal intuition is that one method declaration is more specific than another if any invocation handled by the first method could be passed on to the other one without a compile-time type error." Quotation from JLS2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics