본문 바로가기
JAVA

15. 오버라이딩

by seongju.lee 2022. 10. 2.

오버라이딩

- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것이다.

 

바로 아래 예시를 살펴보면,

class Point3D extends Object{
	
	int x;
	int y;
	
	Point3D(int x, int y){
		this.x = x;
		this.y = y; 
	}
	
	// 기본으로 상속되는 Object class(모든 class의 최고 조상 class)의 toString() 메서드를 오버라이딩 
	public String toString() {
		return "x: "+ x + ", y: " + y;
	}
}

public class OverridinEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		Point3D p3 = new Point3D(1,2);
		
		// println 메서드의 기능: 내부적으로 참조변수가 인자로 들어오면, 내부적으로 toString()을 호출한다.
		// println(참조변수) == println(객체.toString())
		System.out.println(p3.toString());
		System.out.println(p3);
	}

}
  • 모든 class의 최고조상 class인 Object의 toString() 메서드를 오버라이딩한 예시이다.

 

 

오버라이딩의 조건

  • 선언부가 조상 클래스의 메서드와 일치해야 한다.
  • 접근 제어자(public, protecter, private ..)를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  • 예외는 조상클래스의 메서드보다 많이 선언할 수 없다.

 

 

+) 오버라이딩 VS 오버로딩

  • 전혀 관련없음.(오버라이딩은 상속과 관련.)
  • 오버로딩: 기존에 없는 (이름이 같은)새로운 메서드를 정의하는 것.(아래 3가지 조건이 성립하면 오버로딩이다.)
    • 메서드의 이름이 같다.
    • 매개변수의 개수 또는 타입이 달라야 한다.
    • 반환 타입은 영향이 없다.
  • 오버라이딩: 상속받은 메서드의 내용을 변경하는 것.

 

class Parent{
	void parentMethod() {}
}


class Child extends Parent {

    void parentMethod() {} // 오버라이딩 
    void parentMethod(int i) {} // 오버로딩 (위 메서드 오버로딩 )

    void childMethod() {} // 메서드 정의 
    void childMethod(int i) {} // 오버로딩 (위 메서드 오버로딩 )
    void childMethod() {} // 중복정의 (Error)
}

'JAVA' 카테고리의 다른 글

17. 제어자  (0) 2022.10.03
16. super()와 super  (0) 2022.10.02
14. 상속과 포함  (0) 2022.10.02
13. 멤버변수의 초기화  (0) 2022.09.25
12. this()와 this  (0) 2022.09.24