메소드 오버라이딩
1. 메소드 오버라이딩 : 슈퍼클래스의 메소드를 서브클래스에서 재정의 (메소드 덮어쓰기)
-슈퍼클래스의 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모든 것을 동일하게 작성
-메소드 실행 시 서브클래스에서 재정의된 메소드가 무조건 실행된다. 서브클래스가 업캐스팅되고 슈퍼클래스의 메소드를 실행해도 이미 오버라이딩 된 메소드가 실행된다 -> 동적 바인딩이라고 부른다.
ex)
class Shape {
public void draw() {
System.out.println("Shape");
}
}
class Line extends Shape {
public void draw() {
System.out.println("Line")
}
}
class Circle extends Shape {
public void draw() {
System.out.println("Circle")
}
}
draw메소드가 오버라이딩 되어 실행시 동적바인딩이 발생하는 것을 확인할 수 있다.
2. 오버라이딩은 왜 쓰는가?
-슈퍼 클래스에 선언된 메소드를 각 서브 클래스들이 자신만의 내용으로 새로 구현 가능
ex) 사람은 밥을 먹는다라는 메소드가 있다. 사람의 서브클래스 박재식은 밥을먹는다==밥3공기이고 사람의 서브클래스 이인모는 밥을먹는다==밥1공기+매운거 안먹음 이다.
-하나의 이름(인터페이스)에서 서로 다른 내용을 구현하여 '다형성'을 실현
3. super : 슈퍼 클래스의 멤버를 접근할 때 사용되는 레퍼런스
- 서브클래스에서만 사용
- super()는 오버로딩 된 메소드를 찾을 때 사용하는 것. 이거와 다름
- super는 정적 바인딩
cf) 동적, 정적 바인딩?
바인딩이란 변수와 변수에 관련된 속성을 연결시키는 것.
동적바인딩 : 프로그램 실행 시 바인딩이 일어남. 서브클래스의 메소드는 실행이 되야 오버라이딩 실현.
정적바인딩 : 컴파일 시 실현되는 것으로 그냥 변수에 값을 가시적으로 쓴 것. 기본적으로 내가 해온 것.
오버라이딩과 오버로딩 비교
'Programming > Java' 카테고리의 다른 글
5장. 상속 #6 인터페이스 vs 추상클래스 (0) | 2020.06.14 |
---|---|
5장. 상속 #4 추상 메소드/클래스 (0) | 2020.06.13 |
Troubleshoot #1 No enclosing instance of type ... is accessible (0) | 2020.06.11 |
5장. 상속 #2 업/다운캐스팅 (0) | 2020.06.11 |
5장. 상속 #1 슈퍼/서브클래스 (0) | 2020.06.11 |
댓글