Освоюємо Java/Методи
Методи в Java — це закінчена послідовність дій (інструкцій), спрямованих на вирішення окремого завдання. По суті це добре знайомі функції (вони ж процедури, підпрограми) більш ранніх, не ООП мов. Лишень ці функції є членами класів і задля розрізнення із звичайними функціями, згідно термінології об'єктно-орієнтованого програмування функції-члени називаються методами.
Визначення методу [ред.]
В загальному метод описується(визначається) наступним чином:
тип-повернення ідентифікатор-методу (параметри)
{
тіло методу
return повертаєме-значення // якщо void, то інструкція return не обов'язкова
}
Тобто необхідно вказати тип значення, що метод повертатиме, наприклад double, float і т.д. або ж void - якщо нічого не повертає. ідентифікатор-методу - це його назва, за якого до нього звертатимуться. Методи рекомендується іменувати з маленької букви, наприклад, sum, addSum і т.д. В дужках вказується параметри методу через кому. При вказанні параметру необхідно вказати його тип та назву.
Більш повне визначення метода в класі наступне:
class MyClass { ... public ReturnType methodName( ParamOneType param1, ParamTwoType param2 ) throws ExceptionName { ReturnType retType; ... return retType; } ... }
Якщо метод не повертає нічого, то в якості типу-повернення використовується ключове слово "void"
private void methodName( String param1, String param2 ) { ... return; }
Ключове слово "return" в кінці метода можна пропустити. Крім того "return" може застосовуватись будь-де в методі, якщо необхідно закінчити виконання метода, наприклад, після виконання певної умови.
В наступному прикладі використовується метод sum() для знаходження суми трьох чисел.
public class ProgramSum{ public static void main(String[] args) { int a=2, b=3, k=4; int sum=sum(a, b, k); System.out.println("Сума трьох чисел дорівнює "+sum); } public static int sum (int a, int b, int c){ return a+b+c; } }
Як бачимо спочатку оголошуються і ініціалізуються змінні a, b, k. В подальшому дані змінні передаються у метод sum(), де вони сумуються і повертається їхня сума. Результат присвоюється змінній sum. Яка і виводиться на екран. В результаті на екрані з'явиться наступний напис:
Сума трьох чисел дорівнює 9
Зверніть увагу, що третій параметр у тілі метода носить інше ім’я – «c», а не «k». Це демонструє те, що назви параметрів у методі не пов’язані з назвами, які використані при виклику метода. При його виклику відбувається ініціалізація нових змінних зі списку параметрів методу відповідними значеннями змінних, що використані при його виклику.
Перевантаження методів [ред.]
В мові Java в межах одного класу можна визначити два або й більше методів під одним іменем, що мають параметри, які відрізняються або кількістю, або типом. Такі методи називаються перевантаженими, а сам процес як перевантаження (англ. overloading) методів. Це один із способів реалізації поліморфізму.
Наступний приклад демонструє перевантаження методу sum:
public class ProgramSum{ public static void main(String[] args) { int a=2, b=3, k=4; double a1=2.10, b1=4.20, k1=5.30; int sum=sum(a, b, k); double sum2=sum(a1, b1, k1); System.out.println("Сума трьох цілих чисел дорівнює: "+sum); System.out.println("Сума трьох дробових чисел дорівнює: "+sum2); } public static int sum (int a, int b, int c){ return a+b+c; } public static double sum (double a, double b, double c){ return a+b+c; } }
В результаті на екрані отримаємо:
Сума трьох цілих чисел дорівнює: 9 Сума трьох дробових чисел дорівнює: 11.600000000000001
Як бачимо тіло методів практично не відрізняються. Відрізняються лише типом параметрів, що приймаються і типом параметрів, що повертаються, хоча останнє може бути однаковим, або й взагалі метод може нічого не повертати. Цікаво, що якщо б не було першого методу з цілочисловими вхідними параметрами, то можливий виклик другого методу без приведення змінних до типу.
public class ProgramSum{ public static void main(String[] args) { // TODO code application logic here int a=2, b=3, k=4; double a1=2.10, b1=4.20, k1=5.30; double sum=sum(a, b, k); double sum2=sum(a1, b1, k1); System.out.println("Сума трьох цілих чисел дорівнює: "+sum); System.out.println("Сума трьох дробових чисел дорівнює: "+sum2); } public static double sum (double a, double b, double c){ return a+b+c; } }
Результат:
Сума трьох цілих чисел дорівнює: 9.0 Сума трьох дробових чисел дорівнює: 11.600000000000001
Зверніть увагу, що результат у першій стрічці дробовий. Одержаний результат отримали через те, що Java здійснила автоматичне перетворення типів int у double. Проте зворотнє перетворення не здійснюється автоматично, якщо було б навпаки і існував лише перший метод, то при спробі виклику з double параметрами ми б отримали помилку компіляції. В таких випадках потрібно здійснювати явне приведення типів.
В наступному прикладі відбувається виклик трьох перевантажених методів. Додано метод sum() з одним цілочисловим і одним дробовим параметрами.
public class ProgramSum{ public static void main(String[] args) { int a=2, b=3, k=4; double a1=2.10, b1=4.20, k1=5.30; System.out.println("Сума трьох цілих чисел дорівнює: "+sum(a, b, k)); System.out.println("Сума трьох дробових чисел дорівнює: "+sum(a1, b1, k1)); System.out.println("Сума одного цілого числа та одного дробового дорівнює: "+sum(a, k1)); } public static int sum (int a, int b, int c){ System.out.print("1-й метод."); return a+b+c; } public static double sum (double a, double b, double c){ System.out.print("2-й метод."); return a+b+c; } public static double sum (int a, double b){ System.out.print("3-й метод."); return a+b; } }
Результат виконання.
1-й метод.Сума трьох цілих чисел дорівнює: 9 2-й метод.Сума трьох дробових чисел дорівнює: 11.600000000000001 3-й метод.Сума одного цілого числа та одного дробового дорівнює: 7.3
Крім перевантаження існує також термін заміщення методів (англ. overriding). Заміщення відбувається, коли клас потомок (підклас) визначає певний метод, який вже є у батьківському класі(надкласі), таким чином новий метод замінює метод надкласу.