본문 바로가기
Java

자바 오버라이딩 개념정리 (오버라이딩 오버로딩 차이)

by 오늘이 내가 된다. 2022. 1. 5.

오버라이딩이란?

부모 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라고 한다.

부모로 부터 상속받은 메소드를 그대로 사용할 수도 있지만 자식이 필요에 맞게 변경해서 사용

 

class Point {
	int x;
    int y;
    
    String getLocation () {
    return "x : " + x", y :" + y;
}

class Point3D extends Point {
	int z;
    
    String getLocation() {	// 오버라이딩
    	retrun "x :" + x + ", y :" + y + ", z :" + z;
    }
}

기존의 Point 클래스의 경우 2차원 좌표 값만을 받는다.

3D로 작업을 하기 위해서 Point3D는 Point를 상속받은 후 새로운 멤버변수 z를 추가한다.

Point3D 클래스는 오버라이딩을 통해 String getLoation() 메소드를 x, y, z를 할당받도록 재정의 하였다.

 

오버라이딩 조건 ( 상속이 전제조건 )

1. 선언부가 같아야 한다. (이름, 매개변수, 리턴타입)

2. 접근제한자를 좁은 범위로 변경할 수 없다. (ex. public -> private로 변경불가)

3. 부모 클래스의 메소드보다 많은 수의 예외를 선언할 수 없다.

=> 매개변수가 다르다면 오버라이딩이 아니라 오버로딩이다. (재정의x, 새로운 메소드가 추가)

 

오버로딩 vs 오버라이딩

오버로딩 - 기존에 없는 새로운 메소드를 정의하는 것(new)

오버라이딩 - 상속받은 메소드의 내용을 변경하는 것(change, modify)

 

class Parent {
  void parentMethod() { } // 메소드 정의
}
class Child extends Parent {
  void parentMethod() { } // 오버라이딩 (부모클래스와 선언부가 같음)
  void parentMethod(int i) { } // 오버로딩 (매개변수가 다름)

  void childMethod() { } // 메소드 정의
  void childMethod(int i) { } // 오버로딩 (매개변수가 다름)
  void childMethod() { } // 중복정의 에러
}

댓글