Перевантаження методів

Клас може містити кілька методів з однаковим імям, але мають різні списки аргументів Таку можливість називають перевантаженням методів (method overloading) Наприклад, метод println () класу System може бути викликаний з аргументами різного типу: String, int, char і другіміSystemoutprintln (Привіт”) Systemoutprintln (250) Systemoutprintln (A)

Незважаючи на те, що це виглядає як три виклики одного і того ж методу println (), фактично ж викликаються три різних методи Ви можете запитати, чому б не створити методи з різними іменами, наприклад,  printString()printInt()printChar () Одна з причин в тому, що набагато простіше запамятати одне імя методу для друку, ніж запамятовувати кілька імен Є й інші причини для використання перевантаження методів, але вони трохи складніші, щоб пояснювати їх тут Ці причини (polymorfism) потрібно розглядати в більш складних учебнікахКак ви памятаєте, наш клас Fish з глави 4, містив метод dive (), який приймав один аргумент:public int dive(int howDeep) Давайте створимо ще одну версію цього методу, яка не вимагатиме аргументів Цей метод змусить рибку пірнати на 5 метрів, поки глибина занурення не перевищить 100 метрів Нова версія класу Fish містить final змінну DEFAULT_DIVING (глибина пірнання за замовчуванням), значення якої буде рівним пяти метрам Тепер клас Fish містить два перевантажених методу dive ()

public class Fish extends Pet {

int currentDepth=0

final int DEFAULT_DIVING = 5

public int dive(){

currentDepth=currentDepth + DEFAULT_DIVING

if (currentDepth &gt 100){

Systemoutprintln (Я маленька рибка і +

” не можу пірнати глибше 100 метрів )

currentDepth=currentDepth – DEFAULT_DIVING

}else{

Systemoutprintln (Занурююся на + DEFAULT_DIVING + м)

Systemoutprintln (Я на + currentDepth +

” метрів нижче рівня моря )

}

return currentDepth

}

public int dive(int howDeep){ currentDepth=currentDepth + howDeep if (currentDepth &gt 100){

Systemoutprintln (Я маленька рибка і +

” не можу пірнати глибше 100 метрів )

currentDepth=currentDepth – howDeep

}else{

Systemoutprintln (Занурююся на + howDeep + м”) Systemoutprintln (Я на + currentDepth +

” м нижче рівня моря )

}

return currentDepth

}

public String say(String something){

return Ти не знаєш, що риби не вміють говорити”;

}

// constructor

Fish(int startingPosition){

currentDepth=startingPosition

}

}

Тепер клас FishMaster може викликати будь-який з перевантажених методів dive ():public class FishMaster {

public static void main(String[] args) { Fish myFish = new Fish(20) myFishdive(2)

myFishdive () / / Новий перевантажений метод

myFishdive(97) myFishdive(3) myFishsleep()

}

}

Конструктори також можуть бути перевантажені, але при створенні обєкта буде використовуватися тільки один з них JVM буде виконувати виклик конструктора з відповідним списком аргументів Наприклад, якщо в клас Fish додати конструктор за замовчуванням (без аргументів), клас FishMaster зможе створити його примірник за допомогою одного з таких способів: Fish myFish = new Fish(20)

або

Fish myFish = new Fish()

Джерело: Java Programming for Kids, Parents and Grandparents by Yakov Fain

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*