같은 이름의 메서드/생성자를 여러개 가지면서 매개변수의 유형과 갯수를 다르게 하여 다양한 유형의 호출에 응답할수 있게 한 기술.
메서드 오버로딩과 생성자 오버로딩이 있다.
메서드의 이름이 같아도 매개변수의 갯수와 자료형이 다르면 같은 이름의 메서드를 여러개 선언이 가능한것
수행하는 기능은 같으나 처리하는 데이터를 달리할때 사용한다.
사용조건
// overloding을 사용하지 않은경우 더하는 매개변수 마다 각각 다른 메서드를 사용해야한다.
public class Main{
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.stirngStringPlus("hello", "java");
calculator.stringInt("java", 123);
calculator.stringDoublePlus("java", 3.14);
}
public class Calculator{
void stirngStringPlus(String a, String b) {
System.out.println("결과 : "+ a + b);
}
void stringIntplus(String a, int b) {
System.out.println("결과 : "+ a + b);
}
void stringDoublePlus(String a, double b) {
System.out.println("결과 : "+ a + b);
}
}
// overloading을 사용 할경우 plus 메소드 하나를 이용해 매개변수에 여러가지 타입을 받아 처리를 할 수있다.
public class Main{
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.plus("hello", "java");
calculator.plus("java", "123");
calculator.plus("java", "3.14");
}
public class Calculator{
void plus(String a, String b) {
System.out.println(a + b);
}
void plus(String a, int b) {
System.out.println(a + b);
}
void plus(String a, double b) {
System.out.println(a + b);
}
}
생성자도 인자를 다르게 하면 같은이름의 생성자를 여러개 정의 할 수있다.
public class Puppy{
String name;
String action;
public Puppy(){
// 빈 생성자
}
public(String name){ // 한개의 필드만 초기화하는 생성자
this.name = name;
}
/*
이 경우 매개 변수의 개수와 타입이 같으므로 오버로드를 허용하지 않는다.
public Puppy(String goal) {
this.goal = goal;
}
*/
public Puppy(String name, String goal) { // 모든 필드를 초기화하는 생성자
// 생성자에 전달된 변수는 생성자를 벗어 날수 없다.
// 그래서 받아온 변수를 클래스에서 사용 할 수 있도록 전달 되어야 한다
this.name = name; // 멤버 변수와 받아온 변수의 이름이 같으면
this.goal = goal; // 헷갈리지 않게 이 클래스의 변수라는것을 따로 표시한다.( this. )
}
}
public class Main{
public static void main(String[] args) {
// 빈생성자 호출시 출력 : null / null
Puppy puppy = new Puppy();
// 한개의 필드만 초기화하는 생성자 호출시 출력 : 멍멍이 / null
Puppy puppy = new Puppy("멍멍이");
// 모든 필드를 초기화하는 생성자 호출시 출력 : 멍멍이 / 짖는다
Puppy puppy = new Puppy("멍멍이","짖는다");
System.out.println(puppy.name+" / "+puppy.goal);
}
}