728x90
반응형
메소드 오버라이딩(Method Overriding)
- 슈퍼 클래스의 메소드를 서브 클래스에서 재정의
- 슈퍼 클래스 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모든 것 동일하게 작성
- 메소드 무시하기, 덮어쓰기
- 동적 바인딩 발생 - 서브 클래스에 오버라이딩 된 메소드가 무조건 실행되는 동적 바인딩
메소드 오버라이딩 사례
class Shape {
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");
}
}
Shape 클래스의 draw() 메소드를 Line, Rect, Circle 클래스에서 각각 오버라이딩한 사례
Line line = new Line();
line.draw(); //실행 결과 -> Line
Line에서 오버라이딩 한 메소드가 호출됨
Shape shape = new Line();
shape.draw(); //실행 결과 -> Line
업케스팅에 의해 슈퍼 클래스 레퍼런스로 오버라이딩된 메소드 호출(동적 바인딩)
오버라이딩의 목적, 다형성 실현
오버라이딩
- 슈퍼 클래스에 선언된 메소드를, 각 서브 클래스들이 자신만의 내용으로 구현하는 기ㅡㄴㅇ
- 상속을 통해 '하나의 인터페이스(같은 이름)에 서로 다른 내용 구현'이라는 객체 지향의 다형성 실현
실행 시간 다형성 실현
- 동적 바인딩을 통해 실행 중에 다형성 실현(컴파일 타임)
동적 바인딩
실행할 메소드를 실행 시(run time)에 결정
오버라이딩 메소드가 항상 호출
super 키워드
- super는 슈퍼 클래스의 맴버를 접근할 때 사용되는 레퍼런스
- 서브 클래스에서만 사용
- 슈퍼 클래스의 메소드 호출
- 컬파일러는 super의 접근을 정적 바인딩으로 처리
오버라이딩 오버로딩
비교 요소 | 메소드 오버로딩 | 메소드 오버라이딩 |
선언 | 같은 클래스나 상속 곽계에서 동일한 이름의 메소드 중복 작성 | 서브 클래스에서 슈퍼 클래스에 있는 메소드와 동일한 이름의 메소드 재작성 |
관계 | 동일한 클래스 내 혹은 상속 관계 | 상속 관계 |
목적 | 이름이 같은 여러 개의 메소드를 중복 작성하여 사용의 편의성 향상, 다형성 실현 | 슈퍼 클래스에 구현된 메소드를 무시하고 서브 클래스에서 새로운 기능의 메소드를 재정의하고자 함, 다형성 실현 |
조건 | 메소드 이름은 반드시 동일하고, 매개변수 타입이나 개수가 달라야 성립 | 메소드의 이름, 매개변수 타입과 개수, 리턴 타입이 모두 동일하여야 성림 |
바인딩 | 정적 바인딩, 호출될 메소드는 컴파일 시에 결정 | 동적 바인딩, 실행 시간에 오버라이딩된 메소드 찾아 호출 |
728x90
반응형
'전공 > 객체지향프로그래밍' 카테고리의 다른 글
[객체지향프로그래밍][Java] 인터페이스의 구성 요소 심화 내용 (0) | 2023.05.31 |
---|---|
[객체지향프로그래밍][Java] 상속 3 (추상 메소드, 추상 클래스, 인터페이스) (0) | 2023.05.08 |
[객체지향프로그래밍][Java] 상속 1 (객체 생성, 접근 지정자, 업캐스팅, 다운캐스팅, instanceof 연산자) (0) | 2023.04.27 |
[객체지향프로그래밍][Java] 클래스와 객체 2 (접근 지정자, static, final) (0) | 2023.04.18 |
[객체지향프로그래밍][Java] 클래스와 객체 1 (클래스의 구성, 생성자, this, 객체 배열, 오버로딩, 가비지 컬렉션) (0) | 2023.04.18 |