본문 바로가기
SWE/C++ OOP

OOP] 오버로딩(Overloading) 오버라이딩(Overriding)

by S나라라2 2019. 8. 27.
반응형

오버로딩(Overloading) : 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술.

오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용한다.

 

1. 오버로딩(Overloading)

 

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

 

// Overloadingtest.java

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.prinln("매개변수 " + d);
 }
}

 

// test.java

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);
	}
}

 

<실행결과>

매개변수 없음

매개변수 10와 20

매개변수 50.0

매개변수 123.4

 

예제 코드에서와 같이 test라는 같은 이름의 메소드를 여러 개 정의하고,

매개변수만 변경하여 선언했을 때, 

호출 매개변수에 따라 매칭되어 함수를 실행시킨다.

 

 

2. 오버라이딩 (Overriding)

 

상위클래스가 가지고 있는 멤버변수가 하위클래스로 상속되는 것처럼

상위클래스가 가지고 있는 메소드도 하위클래스로 상속되어 하위클래스에서 사용할 수 있다.

하지만, 하위클래스에서 메소드를 재정의해서 사용할 수 있다.

 

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

 

// Employee.java , Manager.java

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.jobOfMange + " 담당입니다.");
    }
}

 

// Employee.java , Manager.java

public class test{
	public static void main (String[] args){
    	// Manager 객체 생성
        Manager baek = new Manager();
        
        // 변수 설정
        baek.name = "flower0";
        baek.age = 25;
        baek.jobOfManager ="개발자";
        
        // Overriding된 Manager객체의 print() 호출
        baek.print();
    }
}

 

<실행결과>

사원의 이름은 flower0이고, 나이는 25입니다.

관리자 flower0은 개발자 담당입니다.

반응형