[Java] OOP_오버라이딩(Overriding)

오버라이딩(Overriding)

조상클래스로부터 상속받은 메소드의 내용을 상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라 한다.
//override : '~위에 덮어쓰다(overwrite)'

오버로딩과 헷갈리지말자
지난 포스팅 : 메소드 오버로딩

class Point { //2차원 좌표
	int x;
    int y;
    
    String getLocation() {
    	//2차원 좌표의 위치 
    	return "x:"+x+",y:"+y;
    }
}

class Point3D extends Point { //상속, 3차원 좌표상의 점
	int z;
    
    String getLocation() { //오버라이딩 : 조상 변경
    	return "x:"+x+",y:"+y+"z:"+z;
    }
}

오버라이딩의 조건*

  • 선언부가 같아야 한다. (이름, 매개변수, 리턴타입)
class Point { 
	int x;
    int y;
    
    String getLocation() { //선언부 1번
    	return "x:"+x+",y:"+y;
    }
}

class Point3D extends Point { 
	int z;
    
    String getLocation() { //선언부 2번
    	return "x:"+x+",y:"+y+"z:"+z;
    }
}

//선언부 1번과 2번이 같다(메소드이름, 반환타입, 매개변수 목록) 
  • 접근제어자를 좁은 범위로 변경할 수 없다.

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

class Parent {
	void parentMethod() throws IoException, SQLException { //예외 선언, 메소드 개수 : IoException 1개, SQLException 1개 = 2개 
    	...
    }
}

class Child extends Parent {
	void parentMethod() throws IoException { //예외 선언, 메소드 개수 : IoException 1개
    	...
    }
}

오버라이딩과 오버로딩의 차이

=> 둘은 전혀 관계가 없지만 이름때문에 헷갈린다.

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

class Parent{
	void parentMethod() {}
}

class Child extends Parent {
	void parentMethod() {} //조상의 메소드를 변경한 것 => 오버라이딩
    void parentMethod(int i) {} // 이름이 같은 메소드를 매개변수(int i)만 다르게 해서 정의 => 오버로딩
    
    void childMethod() {} // 그냥 메소드 정의
    void childMethod(int i) {} // 오버로딩
    void childMethod() {} // 중복정의 -> 에러 발생
}

좋은 웹페이지 즐겨찾기