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()이다.
해당 메서드를 호출힐 대 매개변수로 넘겨주는 값의 타입에 따라 하나가 선택되어 실행되는 것이다.
모토 : " 같은 역할을 하는 메소드는 같은 메소드 이름을 가져야한다. "
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA의 정석]Ch6_객체지향_변수와 메서드(+static 블록) (0) | 2022.07.06 |
---|---|
[JAVA의 정석]6_객체지향개념_클래스와 인스턴스 (0) | 2022.04.27 |
Java - 상속[extends] (0) | 2021.08.29 |
java - 객체 배열(9) (0) | 2021.08.27 |
Java - 동적배열[ArrayList](8) (0) | 2021.08.27 |