1. 오버라이딩 (Overriding)
상위 클래스의 메서드가 구현할 내용과 맞지 않는 경우, 또는 자신만의 메서드로 변경하여 사용할 경우에 하위 클래스에서 동일한 이름의 메서드를 재정의 할 수 있음
2. 오버라이딩 구현
@Override
public int calcPrice(int price) {
bonusPoint += price * bonusRatio;
return price - (int)(price * salesRatio);
}
3. 애노테이션 (annotation)
1. 가상 메서드 (Virtual Method)
다형성의 원리가 적용될 수 있는 멤버 함수(메서드)로써 동적 바인딩으로 처리되는 메서드를 의미
동적 바인딩 수행 시 가상 메서드 테이블을 참조하여 매핑함
2. 메서드 호출과 동작 원리
public class TestMethod {
int num;
void aaa() {
System.out.println("aaa() 호출");
}
public static void main(String[] args) {
TestMethod a1 = new TestMethod();
a1.aaa();
TestMethod a2 = new TestMethod();
a2.aaa();
}
}
3. C++ 에서 가상 함수가 필요한 상황
이유 -> 상위 클래스의 자료형은 하위 타입들의 인스턴스를 가리킬 수 있음 (업캐스팅). 이러면 컴파일 시에는 상위 클래스 타입의 참조 변수가 어떤 인스턴스를 참조하는지 알 수가 없기 때문에 일반화된 상위 클래스의 원본 함수가 수행되도록 설정함 (정적바이딩)
4 . C++ 에서 가상 함수 사용
이유 -> virtual 키워드를 적용했기 이번에는 동적 바인딩이 수행된다. 즉, 업캐스팅된 객체에서 오버라이딩된 함수가 호출될 경우 상위 클래스 타입의 참조 변수가 어떤 하위 클래스의 인스턴스를 참조하는 지 알 수 있고, 따라서 해당 인스턴스의 가상함수 매핑 테이블을 참조하여 재정의된 함수를 수행함 (동적바인딩)
5 . 가상 함수의 역할
1. Java 에서 가상 메서드
2. 가상 메서드 테이블
자바 공부는 어느정도 했다고 생각했는데, 이런 개념이 있는걸 몰랐네요....덕분에 알게되네요