728x90
메소드 오버라이딩(Method Overriding)
- 슈퍼 클래스의 메소드를 서브 클래스에서 재정의
- 슈퍼 클래스 메소드 명, 매개변수 타입 및 개수, 리턴 타입, 접근 지정자 등 모든 것을 동일하게 작성
- (= 메소드 무시하기, 덮어쓰기)
- 서브 클래스에 오버라이딩된 메소드가 무조건 실행되는 것동적 바인딩 발생
└ 내/외부에서 메소드2()의 호출이 발생해도 무조건 서브 클래스의 메소드2()가 호출된다.
└ draw() 메소드의 오버라이딩 사례
오버라이딩 조건
- 부모 클래스의 메소드와 메소드 명, 매개변수 타입 및 개수, 리턴 타입, 접근 지정자 등의 시그니처가 모두 동일해야 함
- 접근 제한을 더 좁게 수정 불가
- _public_이나 _default_나 _private_로 수정 불가
- 추가적인 예외 (Exception)가 발생할 수 있음을 나타낼 수 없음.오버라이딩이 불가능한 경우
오버라이딩이 불가능한 경우
- private 메소드
- 부모 클래스 전용이므로 자식 클래스에 상속되지 않음
- static 메소드
- 클래스 소속이므로 자식 클래스에 상속되지 않음
- final 메소드
- final 메소드는 더 이상 수정불가
다형성 실현
- 슈퍼 클래스에 선언된 메소드를 각 서브 클래스들이 자신만의 내용으로 새로 구현하는 기능
- 상속을 통해 '하나의 인터페이스(같은 이름)에 서로 다른 내용 구현' 이라는 객체 지향의 다형성 실현
- 오버라이딩 : 실행 시간 다형성
- 오버로딩 : 컴파일 타임 다형성
Ex1
class Shape {
public Shape next;
public Shape() {next = null; }
public void draw(){
System.out.println("Shape");
}
}
class Line extends Shape {
public void draw() {
System.out.println("Line");
}
}
class Rect extends Shape {
public void draw() {
System.out.println("Rect");
}
}
class Circle extends Shape {
public void draw() {
System.out.println("Circle");
}
}
public class MethodOverridingEx {
static void paint(Shape p){
p.draw(); //p가 가리키는 객체 내의 draw()호출 (: 동적 바인딩)
}
public static void main(String[] args) {
Line line = new Line();
paint(line);
paint(new Shape());
paint(new Line());
paint(new Rect());
paint(new Circle());
}
}
오버라이딩의 활용
- 연결된 링크드 리스트 형태로 생성가능
- start 와 last 에 레퍼런스를 넣어서 리스트 연결 리스트 형태로 구현가능
Ex2 (Ex1 활용)
public class UsingOverride {
public static void main(String[] args) {
Shape start, last, obj;
start = new Line();
last = start;
obj = new Rect();
last.next = obj;
last = obj;
obj = new Line();
last.next = obj;
last = obj;
obj = new Circle();
last.next = obj;
Shape p = start;
while(p != null) {
p.draw();
p = p.next;
}
}
}
오버로딩 VS 오버라이딩
아래 노션 페이지에 자바 공부 내용에 대해 업로드 합니다!
수정사항이나 질문사항의 경우 노션 댓글로 남겨주세요!(*•̀ᴗ•́*)و ̑̑
개발 환경
작성 플랫폼
728x90
'🧑💻 Language > Java' 카테고리의 다른 글
[Java] 10. 인터페이스 (0) | 2021.05.26 |
---|---|
[Java] 9. 추상 메소드와 추상 클래스 (0) | 2021.05.16 |
[Java] 7. 상속 (0) | 2021.05.08 |
[Java] 6. 메소드 작성과 접근 지정자 (0) | 2021.05.02 |
[Java] 5. 자바의 객체 지향적 특성 (0) | 2021.05.02 |