오버로딩이란 클래스에 메소드를 정의할 때 이름이 같지만 서로 다른 매개변수 형식을 지닌 메소드를 여러 개 정의할 수 있는 방법이다.
package org.opentutorials.javatutorials.overloading.example1;
public class CalculatorDemo {
public static void main(String[] args) {
Calculator c1 = new Calculator();
c1.setOperands(10, 20);
c1.sum();
c1.avg();
c1.setOperands(10, 20, 30);
c1.sum();
c1.avg();
}
}
class Calculator {
int left, right;
int third = 0;
public void setOperands(int left, int right) {
System.out.println("setOperands(int left, int right)");
this.left = left;
this.right = right;
}
public void setOperands(int left, int right, int third) {
System.out.println("setOperands(int left, int right, int third)");
this.left = left;
this.right = right;
this.third = third;
}
public void sum() {
System.out.println(this.left + this.right + this.third);
}
public void avg() {
System.out.println((this.left + this.right + this.third) / 3);
}
}
그런데 문제가 생겼다.
setOperands 메소드도 같이 수정해야 한다. 개선해보자.
public void setOperands(int left, int right, int third) {
System.out.println("setOperands(int left, int right, int third)");
this.setOperands(left, right);
this.third = third;
}
오버로딩의 규칙
1. 매개변수가 다르더라도 리턴타입도 다르면 에러가 난다.
void alpha() { System.out.println("알파메소드호출");
int alpha() { System.out.println("알파메소드호출");
헷갈린다. 미연에 방지하는거다.
2. 매개변수의 이름! 당연히 달라야된다.
void beta(int arg1) { };
void beta(int param1) { };
파라미터의 이름은 해당메소드 작동중에 중요한 사항, 메소드 호출중에는 별 관심이 없다.
출처 : 생활코딩
'자바' 카테고리의 다른 글
인터페이스와 다형성 (0) | 2020.10.14 |
---|---|
클래스와 다형성 (0) | 2020.10.14 |
Model (0) | 2020.10.13 |
HttpSession (0) | 2020.10.13 |
abstract interface (0) | 2020.10.12 |