메소드 오버라이딩 
- 상속한 클래스의 메소드를 재정의하는 방식
- 재정의된 메소드는 해당 클래스에서는 원래대로 돌아오지 못한다 
(자식 클래스를 업캐스팅해서 부모 클래스 타입에서 재정의한 메소드를 호출해도 재정의된 메소드가 나온다 (당연, 외우기))

링크드 리스크로 활용 가능하다
- 자식 타입을 조상타입으로 업 캐스팅했을 때 메소드와 필드(멤버 변수)에 따라 결과가 다르다
메소드의 경우 : 자식 타입의 오버라이딩된 메소드가 호출된다 
필드의 경우 : 조상 타입의 멤버변수가 호출된다

위처럼 자식 타입을 조상 타입으로 업캐스팅하면 자식 타입의 메소드가 출력됩니다
즉, 배열처럼 서로 연결되면서 오버라이딩 메소드란 개별 정보를 담고 있다고 보면 된다
그렇게 조상타입으로 자식 타입의(=오버라이딩된) 메소드를 호출하고, 
다음 조상타입으로 업캐스팅된 자식 타입으로 바꾸면, 무한 반복된다

식을 간략화 시킨다면...
자식 타입에서 업캐스팅해서 조상 타입이 된 객체 ->
오버라이딩된 메소드 호출 -> 업캐스팅한 다른 자식 타입의 객체로 변환-> 
오버라이딩된 메소드 호출 -> 업캐스팅한 다른 자식 타입의 객체로 변환-> 
오버라이딩된 메소드 호출 -> 업캐스팅한 다른 자식 타입의 객체로 변환-> 

 




Q. 오버라이딩된 메소드를 호출하는 이유
A. 그냥 메소드를 호출하면 같은 기능을 하는 메소드만 호출이 됩니다 그러면 다른 조상 타입의 객체로
변환할 필요없이 같은 객체의 같은 메소드만 출력하면 되지만 오버라이딩된 메소드의 경우 자식 타입마다 다르기 때문에 이 행위의 의미를 붙여줍니다

Q. 업캐스팅한 다른 자식 타입의 객체의 의미
A. 위에 설명에서 자식 타입을 조상 타입으로 업캐스팅한다고 했습니다.
같은 조상 타입이라서 변수에 저장할 수 있고, 업캐스팅 했더라도 자식 타입에서 오버라이딩한 메소드는 없어지지 않습니다 즉, 조상타입 하나로 개별 기능을 하는 메소드를 호출할 수 있어서 업캐스팅한 자식 타입을 사용하는겁니다.

Q. 아직도 잘 이해되지 않아요
A. 그럴 땐 실생활에 요소와 비유하면서 생각하면 쉬울 수 있습니다 
열차를 예를 들어보면 객실과 객실사이 연결되는 길이 있는 것처럼 링크드 리스크의 기본적인 구조 또한 정보(객실)와 다음 주소변수(객실사이 연결되는 길)이 있는 특징을 가지고 있습니다

 

 

+ Recent posts