вторник, 6 декабря 2011 г.

Method overloading

При передаче параметра одному из перегруженных методов всегда выбирается наиболее специфичный, например:

public class Overload {
      public void method(Object o) {
        System.out.println("Object");
      }
      public void method(java.io.FileNotFoundException f) {
        System.out.println("FileNotFoundException");
      }
      public void method(java.io.IOException i) {
        System.out.println("IOException");
      }
      public static void main(String args[]) {
        Overload test = new Overload();
        test.method(null);
      }
}
/**
 * Output: FileNotFoundException
 */
Если среди перегруженных методов есть те, которые принимают объекты, находящиеся на одном уровне иерархии, код не скомпилируется:

public class Overload {
    public void method(Object o) {
        System.out.println("Object");
      }
      public void method(String s) {
        System.out.println("String");
      }
      public void method(StringBuffer sb) {
        System.out.println("StringBuffer");
      }
      public static void main(String args[]) {
        Overload test = new Overload();
        test.method(null); //The method method(Object) is ambiguous for the type Overload
      }
}
По мотивам http://habrahabr.ru/blogs/java/111189/

Комментариев нет:

Отправить комментарий