Inheritance(상속)
공식문서에서 PrintWriter를 조금 더 살펴보자.
- PrintWriter(보라색 박스, 자식)라는 클래스는 Writer(노란색 박스, 부모)클래스의 상속을 받았고 Writer(자식)는 Object(연두색 박스,부모)라는 클래스의 상속을 받았다.
- 상속받은 자식은 부모의 변수와 메소드를 모두 사용할 수 있다.
- PrintWriter는 Writer가 가진 변수와 메소드를 그대로 가지고 오면서 동시에 필요한 변수와 메소드를 추가한 것이다.
- Writer는 Object가 가진 변수와 메소드를 그대로 가지고 오면서 동시에 필요한 변수와 메소드를 추가한 것이다.
이클립스 상에서 상속관계를 확인하려면 클래스를 드래그하고 오른쪽 마우스를 클릭, Open Type Hierarchy를 선택해준다.
그럼 왼쪽에 상속관계를 보여주는 섹션이 생긴다.
- Object > Writer > PrintWriter의 상속관계를 확인할 수 있다.
- Object에 toString()이라고 하는 메소드가 있다. Writer와 PrintWriter에서는 toString()이라는 코드를 작성한 적이 없지만, Object의 상속을 받았기 때문에 toString() 메소드를 사용할 수 있다.
extends
- PrintWriter 클래스를 사용해서 p1이라는 인스턴스를 만든다.
- p1.toString()을 실행하게 되면 우선은 PrintWriter 클래스에서 toString()을 찾는다. 없으면 'PrintWriter extends Writer(Writer를 확장에서 PrintWriter를 만듦)'에 따라 Writer로 올라가서 메소드를 찾아보고, Writer 클래스에도 toString()이 없으면 Object 클래스로 올라가서 toString()을 사용하게 된다.
- 맨 위까지 올라갔는데 toString() 메소드가 없으면 에러가 난다.
override
- toString()의 경우 PrintWriter에도 있고 Writer 클래스에도 있는 메소드이다.
- 이런 경우 코드를 실행시키면 PrintWriter에 있는 toString()을 가져다 쓴다.
- 개발자가 Writer에 있는 toString()이 마음에 들지 않아서 PrintWriter에 다시 toString()을 만들어 '덮어 씌우기'를 해버린 것이다.
- 덮어씌우기 = override
Tree
- 상속관계를 나무에 비유해 보여주는 것
- 공식 문서에서 자바 라이브러리들의 상속관계를 확인할 수 있다.
- 모든 라이브러리의 정점에 Object가 있다.
- Object가 가진 메소드들은 모든 클래스들이 공통적으로 사용할 수 있다.