[JAVA] 오버라이딩(overriding),오버로딩(overloading)

unoung·2022년 5월 26일
1

JAVA

목록 보기
5/6

오버라이딩이란?

조상 클래스로부터 상속받은 메서드 내용을 상속받는 클래스에 맞게 변경하는 것을 말한다.
*override : ~위에 덮어쓰다, ~에 우선하다

🖥 코드 작성

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

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

Point3D 클래스는 z축의 좌표값도 필요하기 때문에 포함하여 반환하도록 오버라이딩 하였다.

오버라이딩의 조건

1. 선언부가 조상 클래스의 메서드와 일치해야 한다.

2. 접근 제어자는 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.
👉 만일 조상 클래스에 정의된 메서드의 접근제어자가 protected라면 오버라이딩 하는 자손 클래스의 메서드는 protected,public 이어야 한다. (public > protected > (default) > private )

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

class Parent{
	void parentMethod() throws IOException,SQLException{
    	...
    }
}

class Child extends Parent{
	void parentMethod() throws IOException{
   		...
    }
    ...
}

👉 Child 클래스에 parentMethod()에 선언된 예외의 개수가 조상 클래스의 parentMethod()에 선언된 예외의 개수보다 적으므로 바르게 오버라이딩 되었다.



오버로딩이란?

자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있는 것을 말한다

오버로딩의 조건

1. 메서드 이름이 같아야 한다.

2. 매개변수의 개수 또는 타입이 달라야 한다.

3. 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
👉 리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.



오버로딩 vs 오버라이딩

  • 오버로딩(overloading) : 기존에 없는 새로운 메서드를 정의하는 것(new)
  • 오버라이딩(overriding) : 상속받은 메서드의 내용을 변경하는 것(change,modify)

🖥 코드 작성

class Parent{
	void parentMethod(){}
}

class Child extends Parent{
	void parentMethod(){} //오버라이딩
    void parentMethod(int i){} //오버로딩
    
    void childMethod(){}
    void childMethod(int i){} //오버로딩
    void childMethod(){} //에러 : 중복정의
}


출처: 자바의 정석(도서,유튜브)

profile
복습 블로그

0개의 댓글