jiseongkimu / java_test_1330

0 stars 0 forks source link

2020/09/17 overloading&overriding #17

Open jiseongkimu opened 4 years ago

jiseongkimu commented 4 years ago

overloading

같은 이름의 함수를 여러 개 정의하고, 매개변수의 유형개수를 다르게 하여 다양한 유형의 호출에 응답하게 한다.

public class Overloadingtest {

    // test() 호출
    void test(){
        System.out.println("매개변수 없음");
    }

    // test에 매개변수로 int형 2개 호출
    void test(int a, int b){
        System.out.println("매개변수 "+ a + "와 " + b);
    }

    // test에 매개변수 double형 1개 호출
    void test(double d){
        System.out.println("매개변수 " + d);
    }
}
public class test {

    public static void main(String[] args) {

        // Overloadingtest 객체 생성
        Overloadingtest ob = new Overloadingtest();

        // test() 호출
        ob.test();

        // test(int a, int b) 호출
        ob.test(10, 20);

        // test(double d) 호출
        ob.test(50);

        // test(double d) 호출
        ob.test(123.4);
    }
}

예제에서와 같이 test 라는 같은 이름의 메소드를 여러개 정의하고 매개변수만 변경하여 선언했을 때, 호출 매개변수에 따라 매칭되어 함수를 실행시킨다.

overriding

상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 메소드도 하위 클래스로 상속되어 하위 클래스에서 사용할 수 있다. 하지만, 하위 클래스에서 메소드를 재정의해서 사용할 수 있다.

상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기술을 오버라이딩(Overriding) 이라고 한다.

public class Employee{

    public String name;
    public int age;

    // print() 메소드
    public void print(){
        System.out.println("사원의 이름은 "+this.name+ "이고, 나이는" + this.age+"입니다.");
    }   
}

// Employee 상속
public class Manager extends Employee{

    String jobOfManage;

    // print() 메소드 오버라이딩
    public void print(){
        System.out.println("사원의 이름은 "+this.name + "이고, 나이는" + this.age + "입니다.");
        System.out.println("관리자 "+this.name+"은 "+this.jobOfManage+" 담당입니다.");
    }
}
public class test {

    public static void main(String[] args) {

     // Manager 객체 생성
     Manager lee = new Manager();

     // 변수 설정   
     lee.name = "하이언";
     lee.age = 30;
     lee.jobOfManage="프로젝트 매니저";

// Overriding된 Manager객체의 print()호출
      lee.print();
    }
}

정리한 각각의 실행 조건은 다음과 같다.

  1. 메소드의 이름

    overloading : 동일해야함

    overriding : 동일해야함

  2. 메소드 매개변수의 숫자와 데이터 타입 그리고 순서

    overloading : 다름

    overriding : 동일해야함

  3. 메소드의 리턴 타입

    overloading : 상관없음

    overriding : 동일해야함

DaeAkin commented 4 years ago