오버라이딩이란 무엇일까.
정의 : 부모클래스로 부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라고 한다.
사전 의미는 : ~위에 덮어쓰다 , ~에 우선하다
다음 코드를 확인해 보자 .
쉽게 말하자면
오버라이딩은... 조상으로부터 상속받은 메서드의 내용을 자손에 맞게 변경하는 것을 말합니다.
조상으로부터 상속받은 메서드를 그대로 사용하기도 하지만... 경우에 따라서는 자손클래스에 맞게 내용을 변경해야 할 때가 있습니다.
그럴 때, 오버라이딩이 필요한 것이죠.
상속 받을 때... 상속받고 싶은 멤버만 임의로 선택할 수 없기 때문에... 조상의 모든 멤버를 무조건 받을 수 밖에 없습니다.
그래서 일단 상속은 받고... 상속받은 메서드와 똑같은 메서드를... 내용만 다르게 해서 자손클래스에 정의합니다.
이것이 바로 오버라이딩입니다. 이 때는 똑같은 메서드를 중복해서 정의했다는 에러가 발생하지 않습니다.
오버라이드의 사전적 의미는 ~위에 덮어쓰다, ~에 우선하다’이다.
여기서는 조상으로부터 상속받은 메서드의 내용을 덮어쓴다고 이해하시면 됩니다.
코드를 보시면... 하나의 2차원 좌표를 표현하기 위한 Point클래스가 정의되어 있습니다.
이 클래스에는 2차원 좌표값을 저장하기 위한 멤버변수 x와 y... 그리고 getLocation이라는 좌표의 위치정보를 반환하는 메서드가 있습니다.
이 메서드를 호출하면 x와 y의 값을 문자열로 반환합니다.
그 아래에는 Point클래스를 조상으로 하는 Point3D클래스를 정의하였는데요.
이 클래스는 3차원 좌표를 표현하기 위한 것입니다. 그래서 멤버변수 z를 새로 추가하였습니다.
조상인 Point클래스로부터 상속받은 getLocation메서드는 Point3D클래스에서 그대로 사용할 수 없습니다.
Point3D클래스의 getLocation메서드는 2차원좌표가 아닌 3차원좌표를 문자열로 반환해야 하기 때문이죠.
그래서... 상속받은 getLocaiton메서드를 Point3D클래스에 맞게 x,y,z의 값을 문자열로 반환하도록
재정의 하였습니다. 이 것이 바로 오버라이딩입니다.
Point클래스를 사용하던 사람들은... 새로 작성된 Point3D클래스가 Point클래스의 자손이므로...
Point3D인스턴스에 대해 getLocation메서드를 호출하면... Point클래스의 getLocation메서드가 그랬듯이...
좌표값을 문자열로 얻을 수 있을 것이라고 기대할 것입니다.
그래서... 이와같은 경우에는 새로운 메서드를 제공하는 것보다... 이처럼 오버라이딩을 하는 것이 올바른 선택입니다.
'Backend > java' 카테고리의 다른 글
오버라이딩 Vs 오버로딩 의 차이점 (0) | 2018.08.09 |
---|---|
오버라이딩의 조건은 무엇일까?? (0) | 2018.08.09 |
Object 클래스는 무엇일까 ? (0) | 2018.08.09 |
단일상속 ( single inheritance ) (0) | 2018.08.09 |
클래스간의 관계결정하기 ( 상속 Vs 포함 ) (0) | 2018.08.09 |
#IT #먹방 #전자기기 #일상
#개발 #일상