업캐스팅
묵시적형변환
특별한 처리 없이 형변환이 되어 일어나는 것
상속 관계에서는 모든 하위클래스는 상위클래스로 묵시적 형변환이 가능함
ex) Customer custom = new VIPCustomer();
상위클래스 형으로 변수 생성, 하위클래스 인스턴스 생성
custom 변수가 가르키는 범위는 Customer클래스의 멤버 변수와 메서드로 제한
VIP 인스턴스가 선언되어 확정된 멤버 변수와 메서드는 메모리에 있음
하지만 Customer를 자료형으로 하기 때문에 그 범위가 제한됨
상속에서의 상위클래스와 하위클래스의 메모리 상태
상위클래스의 인스턴스가 먼저 생성되고 (가장 위에있음)
그 아래에 하위클래스 인스턴스가 메모리에 자리잡음
가상메서드
Customer custom = new VIPCustomer();
에서 VIPCustomer클래스의 메서드가 호출됨
자바는 항상 인스턴스 메서드가 호출됨(VIPCustomer) 이런 기법이 가상메서드
정의 :
함수 혹은 메서드 이름이 그 자체로 주소역할을 함 따라서 같은이름을 갖는 메서드는 존재할수없음
Override할 경우 같은 이름의 다른 주소값을 갖는 메서드가 재정의됨 따라서 같은 이름의 다른 기능하는 메서드를 갖을 수 있음
이렇게 Override 할 수 있는 메서드를 가상 메서드라함
다형성
메모리 종류 : 스태틱, 스택, 힙
힙 : 자식 생성시 → 부모도 같이 생성
스태틱 : 자식 설계도 올라갈시 → 부모의 설계도 같이 올라감
스태틱영역 타입의 메소드만 호출 가능
객체의 참조주소 : 부모의 주소
다형성 발생시키는 원인
설계도 영역 : 부모만
힙 : 자식 + 부모 객체
가상함수로 선언 → 상위클래스가 이걸로 지정되어야
하위클래스 함수를 호출 할 수 있다.
가상함수는 가상함수 테이블이 있다.
이 테이블에 각 클래스가 가지는 주소값 저장
→ 해당 인스턴스 함수 호출시 재정의된 경우 재정의 인스턴스가 호출됨
자바는 모든 메서드가 가장 메서드
→상속 관계시 하위클래스에 재정의된 메서드가 있음 →
상위클래스 타입 선언되었어도 하위클래스 인스턴스로 생성, 항상 재정의된 메서드 실행
따라서 다형성은 바로 이 가상함수 테이블에서처럼 재정의된 메서드 주소를 호출함으로서 같은 메서드도 다양하게 구현되어 사용할 수 있음
//박은종멘토 가상함수
//클래스 메모리