Перегрузка методов

Метод называется перегруженным, если существует несколько его версий с одним и тем же именем, но с различным набором параметров. Перегрузка может ограничиваться одним классом или несколькими классами, но обязательно находящимися в одной цепочке наследования. Следует отметить, что статические методы могут перегружаться нестатическими и наоборот.

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

// пример # 5 : вызов перегруженного метода: DemoCD.java

class ClassC {}

class ClassD extends ClassC{}

public class DemoCD {

static void show(ClassC obj1, ClassD obj2){

System.out.println("первый метод show(ClassC, ClassD)");

}

static void show(ClassD obj1, ClassC obj2){

System.out.println("второй метод show(ClassD, ClassC)");

}

static void show(Object obj1, Object obj2){

System.out.println("третий метод show(Object, Object)");

}

public static void main(String[] args) {

ClassC c = new ClassC();

ClassD d = new ClassD();

Object ob= new Object();

show(c,d);//1_первый метод

show(d,c);//2_второй метод

show(c,c);//3_третий метод

//show(d,d);// 4_ошибка компиляции

show(ob, ob);//5_третий метод

show(c,ob);//6_третий метод

show(ob,d);//7_третий метод

}

}

В первом, втором и пятом случаях передаваемые параметры в метод show() полностью совпадают с параметрами при объявлении метода. В третьем случае первый и второй методы не годятся для использования, так как одним из параметров этих методов является объект класса ClassD, а определение вызываемого метода идет вверх по цепочке наследования для параметров, поэтому в данном случае будет вызван метод с параметрами типа Object. Аналогичная ситуация возникает в шестом и седьмом случаях. В четвертом случае оба первых метода show() одинаково подходят для вызова (также как и третий), поэтому возникнет ошибка компиляции. Чтобы избежать неопределенности, следует использовать явное преобразование типов, например:

show(d,(ClassC)d);

show(d,(Object)d);

Каждый из вариантов вызовет в итоге соответствующий ему метод show().








Дата добавления: 2015-04-05; просмотров: 907;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.