Перевантаження методів
Клас може містити кілька методів з однаковим імям, але мають різні списки аргументів Таку можливість називають перевантаженням методів (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 > 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 > 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
Схожі статті:
- Різна відображення HTML документів в браузері залежить від оголошеного Doctype (0)
- Огляд (0)
- Опис завдання (0)
- Преамбула (0)
- Для кого ця стаття (0)
- Введення в сервлети (0)
- Спадкування форми від свого класу (0)
Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.
Коментарів поки що немає.
Ваш отзыв
Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>