Power Java 제11장 상속
상속을 코드를 재사용하기 위한 중요한 기법입니다. 이번 장에서 학습할 내용 상속을 코드를 재사용하기 위한 중요한 기법입니다. 상속이란? 상속의 사용 메소드 재정의 접근 지정자 상속과 생성자 Object 클래스 종단 클래스
상속의 개념 상속의 개념은 현실 세계에도 존재한다. 그림11-1. 상속의 개념
상속의 장점 상속의 장점 상속을 통하여 기존 클래스의 필드와 메소드를 재사용 기존 클래스의 일부 변경도 가능 상속을 이용하게 되면 복잡한 GUI 프로그램을 순식간에 작성 상속은 이미 작성된 검증된 소프트웨어를 재사용 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 보수 코드의 중복을 줄일 수 있다.
상속
상속
상속 사용
상속 사용 그림11-2. Car와 SportsCar
상속 사용
상속의 계층 구조 그림11-3. 상속 계층 구조도
상속의 계층 구조 그림11-4. 클래스들의 크기
상속은 중복을 줄인다. 그림11-5. 각 클래스에 코드가 중복된다. 그림11-6. 중복되는 코드는 수퍼 클래스에 모은다.
상속은 is-a관계 자동차는 탈것이다. (Car is a Vehicle). 사자, 개, 고양이는 동물이다. 도서관은 책을 가지고 있다(Library has a book). 거실은 소파를 가지고 있다.
중간점검
접근 지정자 그림11-7. 상속에서 접근 지정자
예제
예제
예제
메소드 재정의 메소드 재정의(method overriding): 서브 클래스가 필요에 따라 상속된 메소드를 다시 정의하는 것
메소드 재정의의 예 멍멍!
실행결과 멍멍!
@Override
중복 정의와 재정의의 차이 그림11-8. 메소드 재정의와 메소드 중복 정의
super
실행결과
상속과 생성자 서브 클래스의 객체가 생성될 때, 서브 클래스의 생성자만 호출될까? 아니면 수퍼 클래스의 생성자도 호출되는가?
명시적인 호출 super를 이용하여서 명시적으로 수퍼 클래스의 생성자 호출
묵시적인 호출 Shape 생성자 Rectangle 생성자
묵시적인 호출 Shape 생성자 Rectangle 생성자
실행결과 Shape 생성자 Rectangle 생성자
Object 클래스 Object 클래스는 java.lang 패키지에 들어 있으며 자바 클래스 계층 구조에서 맨 위에 위치하는 클래스 그림11-9.Object 클래스는 상속 계층 구조의 맨 위에 있다(출처: java.sun.com)
Object의 메소드 protected Object clone() 객체 자신의 복사본을 생성하여 반환한다. public boolean equals(Object obj) obj가 이 객체와 같은지를 나타낸다. protected void finalize() 가비지 콜렉터에 의하여 호출된다. public final Class getClass() 객체를 생성한 클래스 정보를 반환한다. public int hashCode() 객체에 대한 해쉬 코드를 반환한다. public String toString() 객체의 문자열 표현을 반환한다.
getClass() obj is of type Car
equals() 메소드 동일한 종류의 자동차입니다.
실행결과 동일한 종류의 자동차입니다.
finalize()메소드 Object 클래스는 finalize()라는 콜백(callback) 메소드를 정의한다. 이것은 객체가 소멸되기 직전에 호출된다. Object 클래스의 finalize()에서는 아무 것도 하지 않지만 서브 클래스에서 재정의하여서 자원을 반납하는 등의 정리 과정을 실행할 수 있다 동일한 종류의 자동차입니다.
toString() 메소드 Object 클래스의 toString() 메소드는 객체의 문자열 표현을 반환
종단 클래스와 종단 메소드 키워드 final을 붙이면 상속이나 재정의할 수 없다.