우노
[Java] 오버로딩(Overloading)과 오버라이딩(Overridding)의 차이 본문
오버로딩(Overloading)과 오버라이딩(Overriding)
- 자바에서 다형성을 지원하는 방법으로 메소드 오버로딩(Overloading)과 오버라이딩(Overriding)이 있다.
- 오버로딩(Overloading)과 오버라이딩(Overriding)의 개념은 다르지만, 이름이 비슷해 참 헷갈린다.
- 오버로딩(Overloading) : 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
- 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 사용하는 기술
오버로딩(Overloading)
간단한 예제 코드를 통해 알아보자.
Overloadingtest.java
public class Overloadingtest { // 기본 test() void test(){ System.out.println("매개변수 없음"); } // 2개의 int type 매개변수를 출력하는 test() void test(int a, int b){ System.out.println("매개변수 "+ a + "와 " + b); } // 1개의 double type 매개변수를 출력하는 test() void test(double d){ System.out.println("매개변수 " + 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 라는 같은 이름의 메소드를 여러개 정의하고
매개변수만 변경하여 선언했을 때, 호출 매개변수에 따라 각각의 함수에 매칭되어 실행된다.
오버라이딩(Overriding)
상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼
상위 클래스가 가지고 있는 메소드도 하위 클래스로 상속되어 하위 클래스에서 사용할 수 있다.
하지만, 하위 클래스에서 상위 클래스의 메소드를 재정의해 사용할 수 있다.
상속 관계에 있는 클래스 간에, 같은 이름의 메소드를 재정의하는 기술을 오버라이딩(Overriding) 이라고 한다.
간단한 예제 코드를 통해 알아보자.
Employee.java
public class Employee{ public String name; public int age; // print() 메소드 public void print(){ System.out.println("사원의 이름은 "+this.name+ "이고, 나이는" + this.age+"입니다."); } }
Manager.java
// 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+" 담당입니다."); } }
test.java
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(); } }
실행결과
사원의 이름은 하이언이고, 나이는 30입니다. 관리자 하이언은 프로젝트 매니저 담당입니다.
Employee에 print() 함수를 선언하고, Manager에서 Employee를 상속하여 print() 메소드를 재정의 하였다.
이후, main 함수에서 Manager 객체를 생성 후, print() 메소드를 호출하면
오버라이딩 된 Manager 객체의 print() 메소드가 호출된다.
오버로딩(Overloading)과 오버라이딩(Overriding)의 성립조건
참고
'Language > Java' 카테고리의 다른 글
[Java] 객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란? (0) | 2021.03.12 |
---|---|
[Java] extends, implements의 차이 (2) | 2021.03.12 |
[Java] Superinterface란? (0) | 2021.03.12 |
[Java] 컴파일과 빌드의 차이점 (0) | 2020.07.17 |
[Java] JAR 란? (0) | 2020.07.17 |
Comments