java oop 12 오버로딩

bitcogo·2022년 4월 10일
0

오버로딩
한 클래스 안에 같은 이름의 메서드 여러개 정의하는 것

대표적인 예 println()

println()
println(int x) println(34);
println(String x) println("hello");
println(boolean x)
println(long x)

오버로딩 성립조건
1.메서드 이름이 같아야 한다
2.매개변수의 개수 또는 타입이 달라야한다.
3.반환타입은 상관없다(영향없다)

int add(int a,int b){return a+b;}
long add(int a,int b){return (long)(a+b);}
오버로딩 아니다. 반환타입은 영향을 주지 않는다.

long add(int a,long b){return a+b;}
long add(long a,int b){return a+b;}
오버로딩 맞음. 그러나 add(3,3);했을때 둘중에 뭐 부른지 모름
add(3L,3) 또는 add(3,3L) 이런식으로 정확히 불러줘야함

public class Oop12_overloading {

  public static void main(String[] args) {

      MyMath3 mm =new MyMath3();
    //The method add(long, int) is ambiguous for the type MyMath3
    //만약에 int add(int a,int b)없는데 add(3,3)부르면 모호하다고 에러난다.
      System.out.println(mm.add(3,3));
      System.out.println(mm.add(3L,3));
      System.out.println(mm.add(3,3L));
      System.out.println(mm.add(3L,3L));
   }
}

class MyMath3{
    //오버로딩의 올바른 예 
    //매개변수는 다르지만 같은 의미의 기능수행(같은 작업을 수행)
    int add(int a,int b) {
        System.out.println("int add(int a,int b)-");
        return a+b;
    }
    long add(long a,int b) {
        System.out.println("int add(long a,int b)-");
        return a+b;
    }
    long add(int a,long b) {
        System.out.println("int add(int a,long b)-");
        return a+b;
    }
    long add(long a,long b) {
        System.out.println("long add(long a,long b)-");
        return a+b;
    }
}
profile
공부하고 기록하는 블로그

0개의 댓글