본문 바로가기

JAVA

[JAVA] 기초문법 - 오버라이딩과 다형성(3)

메서드 오버라이딩

오버로딩: 이름이 같은 메서드가 여러개 있는것(매개변수,반환병은 다를 수 있음.)

오버라이딩: 메서드를 덮어 쓰는 것.(매개변수 반환명 모두 같아야함. 구현부만 다름)

같음 이름의 함 수 이지만, (vip클래스가 custimer클래스를 상속받는 상태) 오버라이딩 된 메서드가 불린 것을 알 수 있다.

업스캐스팅 된 경우에도 오버라이딩 된 메서드가 호출 된 것을 알 수 있다.

즉, 재정의된(오버라이딩 된) 메서드가 호출 된다. ㅡ> 가상 메서드 개념 , 자바는 기본적으로 모든 메서드가 가상메서드이다.

add라는 함수를 호출 할때 add(5,3)을 부르는 것과 add(10,2)를 부르는 것은 매개변수는 다르지만, add란 함수의 주소값은 같다.(똑같은 함수를 참조한다. )

인스턴스 변수와 다른 개념. 인스턴스변수는 생서될때 마다 다른 힙 메모리를 갖지만, 로컬변수는 스텍에 다른 위치에 생성된다.

즉, 업캐스팅 일때, 가성메서드에 의해 타입에 해당하는 메서드가 아닌 인스턴스에 해당하는 메서드가 호출된다.

가상메서드에 의해 다형성이 구현된다.

Animal을 상속하는 3가지 클래스를 정의하고, 3개의 클래스에서 Animal 클래스의 메서드를 오버라이딩 한 후, 각 클래스 인스턴스를 생성할때 업캐스팅으로 생성 후, 가상메서드를 이용한 호출ㅡ>animal.move();라는 한줄에 코드에서 여러가지 결과를 확인 할 수 있다.(다형성 예시)