프로그래밍/JAVA

JAVA - 메소드 오버라이딩[overriding]과 오버로딩

개발자 덕구🐾 2021. 8. 30. 21:54
728x90

 

 

 

1. 오버라이딩 이란? ; _ 사전적인 뜻 : 다른 무엇보다 더 중요한 

부모클래스에게 상속받은 메서드를 자식클래스에 맞도록 수정하는 것 (상속관계에서)

 

 

오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로

메서드의 선언부(메서드 이름, 매개변수의 개수 및 타입, 반환타입)는 부모 클래스와 완전히 일치해야한다. 

 

 

부모 클래스에 있는 메서드를 자식 클래스에서 선언하면 자식 클래스의 메서드만 실행된다. 

 

 

 

 

2. 오버라이딩의 규칙

 

 

1) 부모클래스의 메서드와 동일한 시그니쳐와 반환타입을 가진다.

 

-> 구현 부분에서만 다르다.

 

 

2) 오버라이딩된 메서드는 부모클래스보다 접근 범위를 좁게 변경할 수 없다.

 

-> 접근 제어자에는 4가지가 있다. 

큰 순서대로  Public, Protected, Default, Private 

만약 부모클래스의 메서드가 Public이라면 오버라이딩된 메서드는 Public만 가능하다!

확대되는 것은 가능하다! 

 

 

3) 부모클래스의 메서드보다 예외가 많을 수 없다.

 

-> 아직 포스팅 하지않았지만 JAVA에는 예외처리가 있다. 

예외의 수가 부모클래스보다 많을 수 없다! 

예외에 대한 내용은 추후에 올리겠다.

 

 

 

예제 코드 

public class Overrid1 {
	
	static class Point{
		int x, y;
		Point(int x, int y){ //생성자
			this.x = x;
			this.y = y;
		}
		String getLocation() {
			return "x : " + x + "y : " + y;
		}
	}
	
	static class Point3D extends Point{
		int z;
		Point3D(int x, int y, int z){
			super(x,y); //부모클래스의 생성자
			this.z = z;
		}
		@Override
		String getLocation() { // 오버라이딩 
			return "x:" + x + ", y:" + y + ", z:" + z; // 구현부만 다름
		}
	}
	
	public static void main(String[] args) {
		Point3D p = new Point3D(5,6,7);
		p.getLocation();
		System.out.println(p.getLocation());

	}
}

 

 

3. 오버라이딩과 오버로딩

 

오버라이딩은 오버로딩과 단어는 비슷하나 의미는 다르다. 

오버라이딩은 실행 중 결정하는 동적바인딩, 오버로딩은 컴파일 단계에서 결정하는 정적바인딩이다. 

 

 

오버로딩은 기존에 없는 새로운 메서드를 정의하는 것이고, 

오버라이딩은 상속받은 메서드의 내용을 변경하는 것이다. 

 

 

+) 만약 자식클래스가 오버라이딩을 하면 객체는 부모클래스의 해당 메서드를 숨긴다!!

숨겨진 메서드를 이용하고 싶다면 super을 사용하면 된다.

 

 

 

오버로딩 : 확장

오버라이딩 : 덮어쓴다.

 

오버로딩이 뭔데요?

 

오버로딩은 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 말한다. 

메서드 이름은 같게하고 매개변수만을 다르게 하는 것이다. 

 

 

 

> 메서드 이름은 같아야한다.

> 매개변수의 개수 ,순서 또는 타입이 달라야한다.

> 반환 타입은 관계없다. 

 

 

오버로딩의 대표적인 예시는 println()이다.

해당 메서드를 호출힐 대 매개변수로 넘겨주는 값의 타입에 따라 하나가 선택되어 실행되는 것이다. 

 

모토 : " 같은 역할을 하는 메소드는 같은 메소드 이름을 가져야한다. "

 

 

 

반응형