오버로딩

doldol_kim·2020년 2월 28일
0

Java-OOP

목록 보기
2/6

오버로딩은 make new의 느낌이다.

클래스에 메소드를 정의할 때 이름은 같지만, 서로 다른 매개변수 형식을 지닌 메소드를 여러개 정의할 수 있는 방법

메소드의 이름이 같더라도 매개변수의 개수나 데이터 형식이 다르면 다른 메소드로 인식하게 된다.

오버로딩의 조건
  • 메소드의 이름과 반환값은 같아야 한다
  • 매개변수는 달라야한다.

오버로딩을 사용하면 비슷한 기능을 가졌지만, 다른 이름을 가진 메소드들을 더 많이 만들지 않아도 된다.

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 타입
*/
profile
김돌돌입니다

0개의 댓글