카테고리 없음

[JAVA] 오버라이딩

prize1209 2021. 6. 27. 18:19

오버라이딩 

조상 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것이다. 

 

 

class MyPoint {
	int x;
	int y;

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

}

class MyPoint3D extends MyPoint {
	int z;

	String getLocation() {
		return "x:" + x + ", y:" + y + ", z:" + z;
	}
}

public class OverrideTest {
	public static void main(String[] args) {
		MyPoint3D p = new MyPoint3D();
		p.x = 3;
		p.y = 5;
		p.z = 7;
		System.out.println(p.getLocation());
	}
}

 

 

오버라이딩의 조건

1. 선언부가 조상 클래스의 메서드와 일치해야한다. (이름, 매개변수 목록, 리턴타입)

2. 접근제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.

3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다. 

 

 

 

 

조상 클래스에 정의된 static 메서드를 자손 클래스에서 똑같은 이름의 static 메서드로 정의할 수 있을까?

 

가능하다. 하지만, 이것은 각 클래스에 별개의 static 메서드를 정의한 것일 뿐 오버라이딩이 아니다. 

각 메서드는 클래스 이름으로 구별될 수 있으며, 호출할 때는 '참조변수.메서드이름()' 대신 '클래스이름.메서드이름()' 으로 하는 것이 바람직하다. static 멤버들은 자신들이 정의된 클래스에 묶여있다고 생각하면 된다.

 

 

 

 

 

오버로딩 vs 오버라이딩

 

오버로딩(overloading)  기존에 없는 새로운 (이름이 같은) 메서드를 정의하는 것(new) . 상속과 관계없음

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