3. 1. 개념
8. Class 상속
• 부모클래스를성질을자식클래스가포함시키는문법요소
• 객체(사물)의공통적인성질(특성)을모아서 클래스를만들고독립적인성질을 각각클래스로만들면이때공통적인성질을부모클래스라하고개별클래스를자식클래스라한다.
“ 객체 지향 프로그램에서 가장 기본적인 문법 요소 ”
8-1. 개념
클래스 상속
이름
나이
증명서
몸무게
키
먹기
잠자기
등교하기
출근하기
술마신다
공부하기
일하기
사람
이름
나이
학생증
몸무게
키
먹기
잠자기
등교하기
공부하기
학생
이름
나이
사원증
몸무게
키
먹기
잠자기
등교하기
출근하기
술마신다
공부하기
일하기
직장인
이름
나이
몸무게
키
먹기
잠자기
술마신다
일반인
이름
나이
몸무게
키
먹기
잠자기
사람
학생증
등교하기
공부하기
학생
사원증
출근하기
술마신다
공부하기
일하기
직장인
술마신다
일반인
공통 성질(특징)
개별 성질
부모 클래스
자식 클래스
자식 클래스
4. 1. 개념
8. Class 상속
• 중복되는속성(상태)과행동을별도로관리하여중복코드를제거한다..
-이름,나이,몸무게,키,먹기,잠자기
• 학생은사람이다,직장인은사람이다.직장인은성인이다.일반인도성인이다.처럼다양한표현을할수있는것을다양성이라한다.
“ 상속은 코드 중복 제거와 다형성을 위함이다.”
8-1. 개념
다양성
이름
나이
몸무게
키
먹기
잠자기
사람
학생증
등교하기
공부하기
학생
사원증
출근하기
술마신다
일하기
직장인
술마신다
일반인
이름
나이
몸무게
키
먹기
잠자기
사람
고등학생 사원증
출근하기
공부하기
일하기
직장인 일반인
술마신다
성인
술마신다
대학생
학생증
등교하기
공부하기
학생
상세화/구체화
조상 클래스
부모 클래스 부모 클래스
자식 클래스 자식 클래스
학생은 사람이다.
직장인은 사람이다.
일반인은 사람이다.
고등학생은 학생이다.
고등학생은 사람이다.
대학생은 사람이다.
….
사람은 학생이다.
-> 이상한 표현임
=> 상속은 자식에서 부모로 향하는 것이다.
5. 1. 개념
8. Class 상속
• 중복되는속성(상태)과행동을별도로관리하여중복코드를제거한다..
-이름,나이,몸무게,키,먹기,잠자기
• 학생은사람이다,직장인은사람이다.직장인은성인이다.일반인도성인이다.처럼다양한표현을할수있는것을다양성이라한다.
“ 상속은 코드 중복 제거와 다형성을 위함이다.”
8-1.개념
다양성
이름
나이
몸무게
키
먹기
잠자기
사람
고등학생 사원증
출근하기
공부하기
일하기
직장인 일반인
술마신다
성인
술마신다
대학생
학생증
등교하기
공부하기
학생
조상 클래스
부모 클래스 부모 클래스
자식 클래스 자식 클래스
고등학생은 학생이다.
고등학생은 사람이다.
대학생은 사람이다.
….
➢ 다양성표현
사람[ ] = { new 사람(), new 사람() };
학생[ ] = { new 학생(), new 학생(), new 학생() };
사람[ ] = { new 사람(), new 학생(), new 직장인(), new 일반인() };
사람 h01 = new 학생();
사람 h01 = new 직장인();
사람 h01 = new 일반인();
• 배열표현(상속되지않은상태)
-동일자료형만요소로될 수있음
• 배열표현(상속됨)
-부모의성질(특성)을모두받을수있음
-또다른표현
6. 1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
01. 클래스생성
class 자식클래스 extends 부모클래스 {
….
}
사람
학생 직장인
class 학생 extends 사람 { … }
class 직장인 extends 사람 { …. }
사람
브루스버너박사
헐크
class 브루스버너박사 extends 사람, 헐크 { … }
➢ 다중상속->자바에서는허용하지않음
브루스버너박사가 달린다 -> 누가 달리는 것인가 ?
=> 모호성이 발생함
7. 1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
02. 클래스생성시메모리구조 ➢ 사용
인스턴스 메서드 영역 Stack 영역 Heap 영역
eat() {}
sleep() {}
goToSchool()
study()
Human
Student
student 100 Human 객체
( Objects )
Student 객체
( Objects )
name age
weight height
eat() sleep())
studentId
goToSchool()
study()
100 번지
8. 1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
03. 부모객체에생성자는상속대상이아니다.
Invalid method declaration; return type required
-> 부모 객체의 생성자를 재정의 하려고 해서 나는 오류
-> 자식 객체의 메서드로 사용 하여야 함
생성자는 리턴 타입이 없음
리턴 타입이 있는 것은 메서드
04. 다양성
Human
Student Adult
Worker SelfEmployed
CollegeStudent HighSchoolStudent
public class Human { }
public class Adult extends Human { }
public class Worker extends Adult { }
public class SlefEmpolyed extends Adult { }
public class Student extends Human { }
public class CollegeStudent extends Student { }
public class HighSchoolStudent extends Student { }
• 객체를 다양하게 생성 할 수 있다.
-> 중학생, 초등학생 …..
9. 1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
05. 객체생성시타입
class com.hyomee.extend.Human cannot be cast to class com.hyomee.extend.Student
java.lang.ClassCastException: class com.hyomee.extend.Human cannot be cast to class
com.hyomee.extend.Student
java.lang.ClassCastException: class com.hyomee.extend.Human cannot be cast to class
com.hyomee.extend.Student
Up Casting : Human human = (Human) student : compiler에 의해서 자동으로 추가
-> Human으로 전화 되었기 때문에 student의 성질(특성)은 사라짐
-> Human의 멤버, 메서드 만 사용 가능
Down Casting : 개발자가 직접 해야 함
-> Student 객체를 변환 함
-> Human, Student 의 모든 속성(멤버), 메서드 사용
Student는 Human를 상속 받아서 Human의 모든 성질(특성)을 사용 할 수 있음
-> Human, Student 의 모든 속성(멤버), 메서드 사용
Student를 사용 해서 Human으로 생성됨
-> Student의 속성(멤버), 메서드 사용 불가
-> Human의 멤버, 메서드 만 사용 가능
Human 객체 생성
-> Human의 멤버, 메서드 만 사용 가능
X
X
X
10. 1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
05. 객체타입확인(instanceof ) 06. Method Overriding
…
사람
…
술마신다
직장인
…
술마신다
자영자
술마신다
성인
…
사람
…
직장인
…..
자영자
술마신다
성인
성인은 술 마신다
직장인은 맥주를 마신다
자영업자는 소주를 마신다
부모의 행위(메서드)를 재
정의해서 자식에서 재정의
하는 것 -> Overriding
Overriding 이전
Overriding 이후
11. 1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
07. super & this
Overriding 이전
Overriding 이후
➢ 술을마신다를출력하고싶다면
super를 이용해서 부모 호출
• super :부모의멤버,메서드를접근할때사용,private로선언것은접근할수없음
• this :자기자신의멤버,메서드접근
• super() : 자식생성자에서부모의생성자에접근하기위해서사용
12. 1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
08. super()
• super() : 자식생성자에서부모의생성자에접근하기위해서사용
1
2
3
➢ 주의사항
• 생성자를OverLoading Method를만들때는매개변수없는기본생성자를
작성해야함
• super()를 사용 하여 부모 객체를 접근 하는 경우 super()실행 전에
아무것도실행하면안됨
13. 1. Abatract Class
8. Class 상속
8-3. Abstract Class 상속 ( Extends )
• 추상메서드가1개이상포함하고있는클래스는반드시추상클래스로정의해야한다.
• 추상메서드:메서드의본체가없는미완성메서드로상속받은클래스에서실체화(구현)해야한다.
“ 추상 메서드가 1개 이상 포함 하고 있는 클래스 ”
Abatract Class
…
사람
…
술마신다
직장인
…
술마신다
자영자
술마신다
성인
“성인이 술마신다.”를 추상
하 하고 직장인이 술 마시
다는 구체화 한다.
추상 메서드 있음
추상 클래스 선언
추상 메서드 구현
14. 1. Interface Class
8. Class 상속
8-4. Interface Class 상속
• Interface는입출력에서사용하는용어로서로다른시스템간의연동을의미한다.
• Interface는 시스템 또는 각 객체의 종류에 상관 없이 동일한 필드와 메서드를 제공하여 호환성을 제공 하기 위해서 사용 된다.
• 자바에서Interface는객체관계에서다른객체에게공개할기능만추상화하기위한용도로사용이된다.
• Class대신Interface키워드를사용한다.
“시스템 또는 각 객체의 종류에 상관 없이 동일한 필드와 메서드를 제공”
Interface Class
01. Interface 생성
interface 인터페이스명 {
public static final 자료형 필드명 = 값;
public abstract 리턴타입 메서드명();
default 자료형 메서드(매개변수) { … )
}
interface 인터페이스명 {
자료형 필드명 = 값;
리턴타입 메서드명();
default 자료형 메서드(매개변수) { … )
}
생략
15. 1. Interface Class
8. Class 상속
8-4. Interface Class 상속
02. Interface 상속
• implements를 사용함
• implements는 다중 상속 가능 -> implements인터페이스명,인터페이스명
• extends와 같이사용하는경우extends클래스명implements인터페이스명순서로선언해야함
03. Interface 사용
인터페이스명 참조변수 = new 구현클래스();
class 클래스명 implements 인터페이스명 { .. }
class 클래스명 implements 인터페이스명, 인터페이스명 { .. }
class 클래스명 extends 클래스명 implements 인터페이스명 { .. }
상속 받은 객체에 자동
tatic final 로 자동 추가 됨