Language/Java

오버로딩 vs 오버라이딩

JUNGKEUNG 2021. 9. 19. 12:10
반응형

오버로딩(Overloading)


같은 클래스 내에 여러개의 메소드 이름을 같이 쓸수가 있지만, 매개변수갯수가 달라야하고 타입이 달라야한다.

public class OverloadingTest {
    public static void main(String[] args) {
        MyMath3 mm = new MyMath3();
        System.out.println ("mm.add(3, 3) 결과:" + mm.add(3,3));
        System.out.println ("mm.add(3L, 3) 결과:" + mm.add(3L,3));
        System.out.println ("mm.add(3, 3L) 결과:" + mm.add(3,3L));
        System.out.println ("mm.add(3L, 3L) 결과:" + mm.add(3L,3L));

        int[] a = {100, 200, 300};
        System.out.println ("mm.add(a) 결과 : " + mm.add(a));
    }
}

class MyMath3 {
    int add(int a, int b){
        System.out.print ("int add(int a, int b - ");
        return a + b;
    }

    long add(int a, long b){
        System.out.print ("long add(int a, long b) - ");
        return a+b;
    }
    long add(long a, int b){
        System.out.print ("long add(long a, int b) - ");
        int c =0;
        return a+b;
    }
    long add(long a, long b){
        System.out.print ("long add(long a, long b) - ");
        return a+b;
    }
    int add(int [] a){  // 배열의 모든 요소의 합을 결과로 돌려준다.
        System.out.print ("int add(int [] a) - ");
        int result = 0;
        for(int i = 0; i <a.length; i++){
            result += a[i];
        }
        return result;
    }
}

 

 

 

오버라이딩(Overriding)


상위클래스에 있는 메소드이름을 하위클래스에서 사용할수가 있다.

리턴 타입, 매개변수의 갯수, 자료형과 순서를 동일하게 하여 자식 클래스에서 작성해야 한다.

class Goods{
     String goodsName;
     int goodsCount;

     int printa(){
         System.out.println ("상품 이름은" + this.goodsName+"이고, 상품 수량은 "+ this.goodsCount+"입니다");
         return 1;
     }
}

class Seller extends Goods{
    String sellerName;

    int printa(){ //매개변수의 갯수 같아도 상관없다.
        System.out.println ("상품 이름은"+this.goodsName+"이고,, 상품수량" + this.goodsCount+"입니다.");
        System.out.println (this.goodsCount+"상품은 "+ this.sellerName+"이 판매 담당자입니다");
        int a = 5;

        return a;
    }
    void printa(int a){
        System.out.println ("상품 이름은"+this.goodsName+"이고,, 상품수량" + this.goodsCount+"입니다.");
        System.out.println (this.goodsCount+"상품은 "+ this.sellerName+"이 판매 담당자입니다");
    }
    void printa(int b, int a){
        System.out.println ("상품 이름은"+this.goodsName+"이고,, 상품수량" + this.goodsCount+"입니다.");
        System.out.println (this.goodsCount+"상품은 "+ this.sellerName+"이 판매 담당자입니다");
    }

}
public class OverridingTest {
    public static void main(String[] args) {

        Seller seller = new Seller ();

        seller.sellerName = "스티븐";
        seller.goodsCount = 10;
        seller.goodsName = "청소기";

        seller.printa();
    }
}

'Language > Java' 카테고리의 다른 글

내부 클래스  (0) 2021.09.25
싱글톤  (0) 2021.09.19
추상화  (0) 2021.09.19
다형성  (0) 2021.09.19
상속, 패키지, 접근 제어자  (0) 2021.09.16