오버라이딩이란?
부모 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라고 한다.
부모로 부터 상속받은 메소드를 그대로 사용할 수도 있지만 자식이 필요에 맞게 변경해서 사용
class Point {
int x;
int y;
String getLocation () {
return "x : " + x", y :" + y;
}
class Point3D extends Point {
int z;
String getLocation() { // 오버라이딩
retrun "x :" + x + ", y :" + y + ", z :" + z;
}
}
기존의 Point 클래스의 경우 2차원 좌표 값만을 받는다.
3D로 작업을 하기 위해서 Point3D는 Point를 상속받은 후 새로운 멤버변수 z를 추가한다.
Point3D 클래스는 오버라이딩을 통해 String getLoation() 메소드를 x, y, z를 할당받도록 재정의 하였다.
오버라이딩 조건 ( 상속이 전제조건 )
1. 선언부가 같아야 한다. (이름, 매개변수, 리턴타입)
2. 접근제한자를 좁은 범위로 변경할 수 없다. (ex. public -> private로 변경불가)
3. 부모 클래스의 메소드보다 많은 수의 예외를 선언할 수 없다.
=> 매개변수가 다르다면 오버라이딩이 아니라 오버로딩이다. (재정의x, 새로운 메소드가 추가)
더보기
접근제한자는 다음을 참고!
오버로딩 vs 오버라이딩
오버로딩 - 기존에 없는 새로운 메소드를 정의하는 것(new)
오버라이딩 - 상속받은 메소드의 내용을 변경하는 것(change, modify)
class Parent {
void parentMethod() { } // 메소드 정의
}
class Child extends Parent {
void parentMethod() { } // 오버라이딩 (부모클래스와 선언부가 같음)
void parentMethod(int i) { } // 오버로딩 (매개변수가 다름)
void childMethod() { } // 메소드 정의
void childMethod(int i) { } // 오버로딩 (매개변수가 다름)
void childMethod() { } // 중복정의 에러
}
'Java' 카테고리의 다른 글
자바 Scanner 대신 bufferedReader를 사용하는 이유 ( BufferedWriter, StringTokenizer 사용법) (0) | 2022.01.10 |
---|---|
자바 static 과 final, 추상화(abstract) 개념 정리 (0) | 2022.01.05 |
자바 상속(inheritance)의 개념 (부모클래스, 자식클래스, extends) (0) | 2022.01.05 |
자바 Random() 함수를 이용하여 로또생성 프로그램 만들기 (0) | 2022.01.05 |
자바 클래스 및 객체와 인스턴스의 구분 (0) | 2022.01.01 |
댓글