본문 바로가기

Java

Java 오버라이딩(Overriding) 과 오버로딩(Overloading)

 

 

메서드 오버라이딩(overriding)
상속받은 조상의 메서드를 자신에 맞게 변경하는 것

override: v. 덮어쓰다

 


오버라이딩의 조건
1. 선언부가 조상 클래스의 메서드와 일치해야 한다.
2. 접근제어자(public, protected, default, private)를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음
3. 예외(8장에서 배움)는 조상 클래스의 메서드보다 많이 선언할 수 없음(자손의 예외는 조상 클래스보다 같거나 적음)

 

class MyPoint3 {
    int x;
    int y;
    String getLocation() { // 조상클래스의 메서드
    	return "x:"+x+", y:"+y;
    }
}


class MyPoint3D extends MyPoint3 {

    int z;

    // 조상의 getLocation()을 오버라이딩
    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());
    }

}

 




오버라이딩 vs 오버로딩
근본적으로 두개는 관계없는 것

 

오버라이딩(overriding): 상속받은 메서드의 내용을 변경하는 것(change, modify) // 이름이 같은 메서드 내용을 수정하는 것
오버로딩(overloading): 기존에 없는 새로운 메서드를 정의하는것 (new) // 이름이 같은 메서드를 매개변수 다르게 정의 하는것, 상속X

 

class Parent1 {
	void parentMethod() {
		
	}
}

class Child1 extends Parent {
	void parentMethod() {} // 부모 클래스의 메서드 내용 변경: 오버라이딩
	void parentMethod(int i) {} // 위 라인에서 만들어진 parentMethod()를 재정의: 오버로딩
	
	void childMethod() {} // 자손 클래스의 메서드 정의 
	void childMethod(int i) {} //위 라인에서 만들어진 childMethod()를 재정의: 오버로딩
//	void childMethod() {} // Error, 중복 정의
}
public class CompareOver {

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

	}

}