클래스에 메소드를 정의할 때 이름은 같지만, 서로 다른 매개변수 형식을 지닌 메소드를 여러개 정의할 수 있는 방법
메소드의 이름이 같더라도 매개변수의 개수나 데이터 형식이 다르면 다른 메소드로 인식하게 된다.
오버로딩을 사용하면 비슷한 기능을 가졌지만, 다른 이름을 가진 메소드들을 더 많이 만들지 않아도 된다.
package pr01;
class Calculator {
int left, right;
int third;
public void setOperand(int a,int b){
System.out.println("2개짜리 연산");
this.left=a;
this.right=b;
}
public void setOperand(int a, int b, int c){
System.out.println("3개짜리 연산");
this.setOperand(a,b);
/*this.left=a;
this.right=b;*/
this.third=c;
}
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);
}
}
public class test {
public static void main(String[] args) {
Calculator c1 = new Calculator();
c1.setOperand(10,20);
c1.sum();
c1.avg();
Calculator c2 = new Calculator();
c2.setOperand(10,20,30);
c2.sum();
c2.avg();
}
}
package pr01;
public class test {
void A(){
System.out.println("매개변수 0개");
}
void A(int a){
System.out.println("매개변수 1개");
}
void A(int a, int b){
System.out.println("매개변수 2개");
}
void A(String s1){
System.out.println("String s1 메소드");
}
public static void main(String[] args) {
test t1 = new test();
t1.A();
t1.A(1);
t1.A(1,2);
t1.A("ffff");
}
}
/*
매개변수 0개
매개변수 1개
매개변수 2개
String s1 메소드
*/
package pr01;
class test_sub extends test{
void A(){
System.out.println("자식클래스 : 매개변수 0개");
}
void A(String s1, String s2){
System.out.println("자식클래스 : 매개변수 2개 : String 타입");
}
}
public class test {
void A(){
System.out.println("부모 클래스 : 매개변수 0개");
}
void A(int a){
System.out.println("부모 클래스 : 매개변수 1개");
}
void A(int a, int b){
System.out.println("부모 클래스 : 매개변수 2개");
}
void A(String s1){
System.out.println("부모 클래스 : 매개변수 1개 : String 타입");
}
public static void main(String[] args) {
test t1 = new test();
t1.A();
t1.A(1);
t1.A(1,2);
t1.A("ffff");
System.out.println("----------");
test_sub t2 = new test_sub();
t2.A(); // A라는 메소드가 부모 클래스에 있으며, 매개변수가 없는 형식이므로 메소드 오버라이딩
t2.A(1); // 자식 클래스에 이러한 메소드는 정의 되어있지 않다. -> 부모 클래스의 메소드를 호출
t2.A(1,2);// 자식 클래스에 이러한 메소드는 정의 되어있지 않다.-> 부모 클래스의 메소드를 호출
t2.A("헤헤");// 자식 클래스에 이러한 메소드는 정의 되어있지 않다.-> 부모 클래스의 메소드를 호출
t2.A("안녕","하이"); // A라는 메소드가 부모클래스에 있지만, 매개변수의 형식이 String 으로 2개가 있는 메소드는 없다 -> 메소드 오버로딩
}
}
/*
부모 클래스 : 매개변수 0개
부모 클래스 : 매개변수 1개
부모 클래스 : 매개변수 2개
부모 클래스 : 매개변수 1개 : String 타입
----------
자식클래스 : 매개변수 0개
부모 클래스 : 매개변수 1개
부모 클래스 : 매개변수 2개
부모 클래스 : 매개변수 1개 : String 타입
자식클래스 : 매개변수 2개 : String 타입
*/