JAVA1 - 13.3 상속 Inheritance

2022. 1. 20. 19:38·youtube.com|user|egoing2/JAVA1
728x90


상속 Inheritance

 

 

 PrintWriter는 Writer 라는 Class를 상속받았다.

 Writer 라는 Class는 Object 라는 Class를 상속받았다. 

 

 이것이 무슨 뜻일까?

우리가 어떤 기능을 만들 때 처음부터 끝까지 다 만들기는 어렵다. PrintWriter를 만든 사람도 처음부터 다 만들기 싫으니 이미 있는 Writer 라는 Class가 갖고 있는 메소드, 변수를 그대로 물려받으면서 여기에 자기가 원하는 변수, 메소드를 추가한 것이 PrintWriter인 것이다. 이와 같이 Writer도 Oject라는 Class에서 파생된 것이다. 

 

 Eclipse에서 PrintWriter라는 Class의 상속관계를 살펴보자. 

 

 

 PrintWriter에서 오른쪽 클릭을 한 후, Open Type Hierarchy 를 클릭해보자.

 

 

 

 왼쪽에서 PrintWriter의 상속관계를 볼 수 있고, 오른쪽에서는 이런 메소드와 변수를 가지고 있다는 것을 볼 수 있다.

 

 Object Class에서 toString(): String 이라는 메소드가 있다. 

 

 

 toString(): String 이라는 메소드를 Writer와 PrintWriter Class에서는 구현한 적이 없다.

그럼에도 불구하고 PrintWriter는 Writer를 Writer는 Object를 상속받고 있기 때문에 toString(): String 이라는 메소드를 사용할 수 있다. 

 

 

 toString(): String 이라는 메소드를 실행해보면 먼저 PrintWriter에서 찾고 없으면 Writer, 여기에도 없으면 Object로 가서 찾는다. 맨 위의 Class에서 있다면 실행이 될 것이고 없다면 에러를 뱉어낼 것이다.

 

 다른 측면을 한 번 살펴보자.

 

 

 

 Writer 에 write(String) 메소드가 정의되어 있다. (write에 입력값으로 String을 받는 메소드)

 Writer를 상속받는 PrintWriter에도 write(String) 메소드가 정의되어 있다. 다시 말해서 덮어쓰기가 되어있다는 것.

 이런 상황에서 

 

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
public class InstanceApp {

	public static void main(String[] args) throws IOException {

		PrintWriter p1 = new PrintWriter("result1.txt");
		p1.write("Hello 1");
		p1.close();
		
		PrintWriter p2 = new PrintWriter("result2.txt");
		p2.write("Hello 2");
		p2.close();		
		
		System.out.println(p1.toString());
		p1.toString();
		p1.write("hello 1");
	}

}

 

 라고 한다면 이는 PrintWriter의 메소드를 사용하는 것이다. 

 

 이 관계를 설명해보면

 

 PrintWriter를 만든 사람이 Writer Class에서 write의 기능이 마음에 들지 않아 덮어쓰기를 하는 것이다. 

이러한 관계를 PrintWriter의 write가 Write의 write를 덮어쓰기를 했다. 영어로는 override했다. 

 

 JAVA의 공식 사용 설명서에 보면 Tree라는 것이 있다. 

JAVA가 우리에게 기본적으로 제공하는 표준 라이브러리의 클래스들이 서로 간의 어떠한 상속관계를 맺고 있는 가를 보여준다.

 

 

 그 정점에는 Object가 있다. 그리고 이 Object가 가지고 있는 메소드들은 모든 Class가 공통적으로 사용할 수 있는 메소드 이기 때문에 시간을 내서 Object가 가지고 있는 메소드들의 의미, 쓰임에 대해 알아보자.

 


 

 위의 사진을 보면 lock 이라고 하는 어떤 변수, 필드가 Writer라는 Class에 정의되어 있고 그것을 상속받아서 이 PrintWriter도 lock 이라고 하는 필드를 사용할 수 있다는 뜻.

 

 위의 사진은 Object라는 Class가 갖고 있는 이러이러한 메소드들을 상속받았기 때문에 사용할 수 있다는 것을 알려준다. 

 

 

저작자표시 (새창열림)

'youtube.com|user|egoing2 > JAVA1' 카테고리의 다른 글

JAVA1 - 14.2 나의 앱 만들기 (변수 도입)  (0) 2022.01.21
JAVA1 - 14.1 나의 앱 만들기 (OT, 기본 기능 구현)  (0) 2022.01.21
JAVA1 - 13.2 인스턴스 Instance  (0) 2022.01.20
JAVA1 - 13.1 자바 문서 보는 법 (패키지, 클래스, 변수, 메소드)  (2) 2022.01.20
JAVA1 - 10. 디버거  (0) 2021.12.16
'youtube.com|user|egoing2/JAVA1' 카테고리의 다른 글
  • JAVA1 - 14.2 나의 앱 만들기 (변수 도입)
  • JAVA1 - 14.1 나의 앱 만들기 (OT, 기본 기능 구현)
  • JAVA1 - 13.2 인스턴스 Instance
  • JAVA1 - 13.1 자바 문서 보는 법 (패키지, 클래스, 변수, 메소드)
ro117youshin
ro117youshin
코딩 / 외국어공부 (영어, 중국어) / 독서 등 자기계발을 기록합니다.
  • ro117youshin
    Taking an extra step
    ro117youshin
  • 전체
    오늘
    어제
    • 분류 전체보기 (153)
      • DDD (5)
      • JAVA (13)
      • Spring Boot (2)
      • Spring (4)
      • MySQL (1)
      • C (1)
      • Algorithm & Data Structure (34)
        • study (15)
        • programmers (0)
        • boj (18)
        • assignments (1)
      • CS: Computer Science (6)
        • CS50 2019 (4)
        • Network (2)
        • Database (0)
      • Git (3)
      • foreign language (16)
        • English (0)
        • Chinese (16)
      • BOOK (2)
      • ETC (2)
      • youtube.com|user|egoing2 (64)
        • WEB1 - HTML & Internet (5)
        • WEB2 - CSS (9)
        • WEB2 - JavaScript (18)
        • JavaScript Immutability (0)
        • DATABASE1 (4)
        • DATABASE2 MySQL (12)
        • JAVA1 (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    HSK6급
    DATABASE2
    자바
    중국어공부
    HSK6급공부
    백준
    JAVA1
    HSK6급모의고사
    알고리즘문제
    baekjoon
    HSK6급필수어휘
    나의 앱 만들기
    생활코딩
    객체
    Domain Driven Design
    도메인 주도 설계
    최범균
    BOJ
    javascript
    variable
    ddd
    css
    js
    mysql
    Java
    개발공부
    HTML
    코딩공부
    조건문
    Java자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
ro117youshin
JAVA1 - 13.3 상속 Inheritance
상단으로

티스토리툴바