Урок 27. Перегрузка методов – Devcolibri

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

После просмотра видеоверсии урока обязательно изучите текстовый материал. Он дополняет видеоматериал и позволит вам полностью понять тему урока.

Методы, в которых нельзя обобщить тип входных параметров

В видеоуроке не хватает объяснения того, зачем нужно перегружать методы. Ведь можно просто назвать метод немного иначе или изменить тип возвращаемого значения. Чаще всего перегружают методы, которые действительно делают одно и тоже, но нельзя обобщить их сигнатуру (базовым классом или интерфейсом). Рассмотрим стандартный метод из библиотеки java String.valueOf:

static String valueOf(boolean b) 
static String valueOf(char c) 
static String valueOf(char[] data) 
static String valueOf(char[] data, int offset, int count) 
static String valueOf(double d) 
static String valueOf(float f) 
static String valueOf(int i) 
static String valueOf(long l) 
static String valueOf(Object obj)

Этот метод означает, что любой тип (примитивный и ссылочный) мы можем представить в виде строки. Если бы перегрузки методов не было в java, то эти методы бы выглядели так:

static String valueOfBoolean(boolean b) 
static String valueOfChar(char c) 
static String valueOfCharArray(char[] data) 
static String valueOfCharArrayWithOffset(char[] data, int offset, int count) 
static String valueOfDouble(double d) 
static String valueOfFloat(float f) 
static String valueOfInt(int i) 
static String valueOfLong(long l) 
static String valueOfObject(Object obj)

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

Методы с аргументами по умолчанию

Также методы, в которых могут быть значения по умолчанию, являются перегруженными. Представьте, что вы хотите вывести значение в консоль, причём второе значение – boolean, который указывает, выводить ли значение с новой строки. Метод выглядит так:

    public static void display(String string, boolean breakLine) {
        if(breakLine) {
            System.out.println(string);
        } else {
            System.out.print(string);
        }
    }

Представьте, что в 90% случаев вы передаёте значение аргумента breakLine == true. Чтобы код выглядел чище, можно создать перегруженный метод:

    public static void display(String string) {
        display(string, true);
    }

    public static void display(String string, boolean breakLine) {
        if(breakLine) {
            System.out.println(string);
        } else {
            System.out.print(string);
        }
    }

Теперь можно вызывать метод display("string"), не передавая явно второй аргумент.

Возникли проблемы при прохождении? Напишите нам в чат поддержки Вконтакте или Facebook. Мы поможем вам решить проблему и вы сможете продолжить обучение.
УВИДЕТЬ ВСЕ Добавить заметку
ВЫ
Добавить ваш комментарий