SlideShare a Scribd company logo
JAVA Class 상속
작성자 : 홍효상
이메일 : hyomee@naver.com
소스 : https://github.com/hyomee/JAVA_EDU
프로그램은 사람이 이해하는 코드를 작성.
느려도 꾸준하면 경기에서 이긴다.
Content
소스 : https://github.com/hyomee/JAVABASIC
8. Class 상속
1. 개념
2. Class 상속 ( Extends )
3. Abstract Class 상속 ( Extends )
4. Interface Class 상속 ( Implements )
1. 개념
8. Class 상속
• 부모클래스를성질을자식클래스가포함시키는문법요소
• 객체(사물)의공통적인성질(특성)을모아서 클래스를만들고독립적인성질을 각각클래스로만들면이때공통적인성질을부모클래스라하고개별클래스를자식클래스라한다.
“ 객체 지향 프로그램에서 가장 기본적인 문법 요소 ”
8-1. 개념
클래스 상속
이름
나이
증명서
몸무게
키
먹기
잠자기
등교하기
출근하기
술마신다
공부하기
일하기
사람
이름
나이
학생증
몸무게
키
먹기
잠자기
등교하기
공부하기
학생
이름
나이
사원증
몸무게
키
먹기
잠자기
등교하기
출근하기
술마신다
공부하기
일하기
직장인
이름
나이
몸무게
키
먹기
잠자기
술마신다
일반인
이름
나이
몸무게
키
먹기
잠자기
사람
학생증
등교하기
공부하기
학생
사원증
출근하기
술마신다
공부하기
일하기
직장인
술마신다
일반인
공통 성질(특징)
개별 성질
부모 클래스
자식 클래스
자식 클래스
1. 개념
8. Class 상속
• 중복되는속성(상태)과행동을별도로관리하여중복코드를제거한다..
-이름,나이,몸무게,키,먹기,잠자기
• 학생은사람이다,직장인은사람이다.직장인은성인이다.일반인도성인이다.처럼다양한표현을할수있는것을다양성이라한다.
“ 상속은 코드 중복 제거와 다형성을 위함이다.”
8-1. 개념
다양성
이름
나이
몸무게
키
먹기
잠자기
사람
학생증
등교하기
공부하기
학생
사원증
출근하기
술마신다
일하기
직장인
술마신다
일반인
이름
나이
몸무게
키
먹기
잠자기
사람
고등학생 사원증
출근하기
공부하기
일하기
직장인 일반인
술마신다
성인
술마신다
대학생
학생증
등교하기
공부하기
학생
상세화/구체화
조상 클래스
부모 클래스 부모 클래스
자식 클래스 자식 클래스
학생은 사람이다.
직장인은 사람이다.
일반인은 사람이다.
고등학생은 학생이다.
고등학생은 사람이다.
대학생은 사람이다.
….
사람은 학생이다.
-> 이상한 표현임
=> 상속은 자식에서 부모로 향하는 것이다.
1. 개념
8. Class 상속
• 중복되는속성(상태)과행동을별도로관리하여중복코드를제거한다..
-이름,나이,몸무게,키,먹기,잠자기
• 학생은사람이다,직장인은사람이다.직장인은성인이다.일반인도성인이다.처럼다양한표현을할수있는것을다양성이라한다.
“ 상속은 코드 중복 제거와 다형성을 위함이다.”
8-1.개념
다양성
이름
나이
몸무게
키
먹기
잠자기
사람
고등학생 사원증
출근하기
공부하기
일하기
직장인 일반인
술마신다
성인
술마신다
대학생
학생증
등교하기
공부하기
학생
조상 클래스
부모 클래스 부모 클래스
자식 클래스 자식 클래스
고등학생은 학생이다.
고등학생은 사람이다.
대학생은 사람이다.
….
➢ 다양성표현
사람[ ] = { new 사람(), new 사람() };
학생[ ] = { new 학생(), new 학생(), new 학생() };
사람[ ] = { new 사람(), new 학생(), new 직장인(), new 일반인() };
사람 h01 = new 학생();
사람 h01 = new 직장인();
사람 h01 = new 일반인();
• 배열표현(상속되지않은상태)
-동일자료형만요소로될 수있음
• 배열표현(상속됨)
-부모의성질(특성)을모두받을수있음
-또다른표현
1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
01. 클래스생성
class 자식클래스 extends 부모클래스 {
….
}
사람
학생 직장인
class 학생 extends 사람 { … }
class 직장인 extends 사람 { …. }
사람
브루스버너박사
헐크
class 브루스버너박사 extends 사람, 헐크 { … }
➢ 다중상속->자바에서는허용하지않음
브루스버너박사가 달린다 -> 누가 달리는 것인가 ?
=> 모호성이 발생함
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 번지
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 { }
• 객체를 다양하게 생성 할 수 있다.
-> 중학생, 초등학생 …..
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
1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
05. 객체타입확인(instanceof ) 06. Method Overriding
…
사람
…
술마신다
직장인
…
술마신다
자영자
술마신다
성인
…
사람
…
직장인
…..
자영자
술마신다
성인
성인은 술 마신다
직장인은 맥주를 마신다
자영업자는 소주를 마신다
부모의 행위(메서드)를 재
정의해서 자식에서 재정의
하는 것 -> Overriding
Overriding 이전
Overriding 이후
1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
07. super & this
Overriding 이전
Overriding 이후
➢ 술을마신다를출력하고싶다면
super를 이용해서 부모 호출
• super :부모의멤버,메서드를접근할때사용,private로선언것은접근할수없음
• this :자기자신의멤버,메서드접근
• super() : 자식생성자에서부모의생성자에접근하기위해서사용
1. Class 상속 ( Extends )
8. Class 상속
8-2. Class 상속 ( Extends )
08. super()
• super() : 자식생성자에서부모의생성자에접근하기위해서사용
1
2
3
➢ 주의사항
• 생성자를OverLoading Method를만들때는매개변수없는기본생성자를
작성해야함
• super()를 사용 하여 부모 객체를 접근 하는 경우 super()실행 전에
아무것도실행하면안됨
1. Abatract Class
8. Class 상속
8-3. Abstract Class 상속 ( Extends )
• 추상메서드가1개이상포함하고있는클래스는반드시추상클래스로정의해야한다.
• 추상메서드:메서드의본체가없는미완성메서드로상속받은클래스에서실체화(구현)해야한다.
“ 추상 메서드가 1개 이상 포함 하고 있는 클래스 ”
Abatract Class
…
사람
…
술마신다
직장인
…
술마신다
자영자
술마신다
성인
“성인이 술마신다.”를 추상
하 하고 직장인이 술 마시
다는 구체화 한다.
추상 메서드 있음
추상 클래스 선언
추상 메서드 구현
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 자료형 메서드(매개변수) { … )
}
생략
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 로 자동 추가 됨

More Related Content

What's hot

Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
Younghan Kim
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdf
Ji Hoon Lee
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
Yong Joon Moon
 
Java, android 스터티2
Java, android 스터티2Java, android 스터티2
Java, android 스터티2
Heejun Kim
 
Java 기초
Java 기초Java 기초
Java 기초
Hyosang Hong
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
용호 최
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
Younghan Kim
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
Younghan Kim
 
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
정연 최
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
Yong Joon Moon
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
beom kyun choi
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
handfoot
 
10 data nested_classes
10 data nested_classes10 data nested_classes
10 data nested_classes
정연 최
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
hungrok
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
Seung-June Lee
 
9 object class
9 object class9 object class
9 object class웅식 전
 
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
 [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
정연 최
 

What's hot (18)

Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdf
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
 
Java, android 스터티2
Java, android 스터티2Java, android 스터티2
Java, android 스터티2
 
Java 기초
Java 기초Java 기초
Java 기초
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
 
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
 
10 data nested_classes
10 data nested_classes10 data nested_classes
10 data nested_classes
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
9 object class
9 object class9 object class
9 object class
 
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
 [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
 

Similar to Java_06 상속

Hello, C# : OOP
Hello, C# : OOPHello, C# : OOP
Hello, C# : OOP
Ye Chan Lee
 
[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍MinGeun Park
 
Working with code
Working with codeWorking with code
Working with code
JaeYeoul Ahn
 
Python class
Python classPython class
Python class
건희 김
 
Java 다형성
Java 다형성Java 다형성
Java 다형성
JaeYeoul Ahn
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
Yoonwhan Lee
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
Ubuntu Korea Community
 
마이캠퍼스 딥러닝스쿨(한돌) 파트#1-이론
마이캠퍼스 딥러닝스쿨(한돌) 파트#1-이론마이캠퍼스 딥러닝스쿨(한돌) 파트#1-이론
마이캠퍼스 딥러닝스쿨(한돌) 파트#1-이론
마이캠퍼스
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
ChangHyeon Bae
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
Hong Hyo Sang
 
안.전.제.일. 강화학습!
안.전.제.일. 강화학습!안.전.제.일. 강화학습!
안.전.제.일. 강화학습!
Dongmin Lee
 
SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표Sinhyub Kim
 

Similar to Java_06 상속 (12)

Hello, C# : OOP
Hello, C# : OOPHello, C# : OOP
Hello, C# : OOP
 
[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍
 
Working with code
Working with codeWorking with code
Working with code
 
Python class
Python classPython class
Python class
 
Java 다형성
Java 다형성Java 다형성
Java 다형성
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
 
마이캠퍼스 딥러닝스쿨(한돌) 파트#1-이론
마이캠퍼스 딥러닝스쿨(한돌) 파트#1-이론마이캠퍼스 딥러닝스쿨(한돌) 파트#1-이론
마이캠퍼스 딥러닝스쿨(한돌) 파트#1-이론
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
 
안.전.제.일. 강화학습!
안.전.제.일. 강화학습!안.전.제.일. 강화학습!
안.전.제.일. 강화학습!
 
SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표
 

More from Hong Hyo Sang

Javascript
JavascriptJavascript
Javascript
Hong Hyo Sang
 
Java_10 람다
Java_10 람다Java_10 람다
Java_10 람다
Hong Hyo Sang
 
Java_09 이너클래스
Java_09 이너클래스Java_09 이너클래스
Java_09 이너클래스
Hong Hyo Sang
 
Java_08 collection
Java_08 collectionJava_08 collection
Java_08 collection
Hong Hyo Sang
 
Java_07 제너릭 메서드
Java_07 제너릭 메서드Java_07 제너릭 메서드
Java_07 제너릭 메서드
Hong Hyo Sang
 
Java_03 연산자
Java_03 연산자Java_03 연산자
Java_03 연산자
Hong Hyo Sang
 
Java_04 제어
Java_04 제어Java_04 제어
Java_04 제어
Hong Hyo Sang
 
Java_02 변수자료형
Java_02 변수자료형Java_02 변수자료형
Java_02 변수자료형
Hong Hyo Sang
 
Java_01 기초
Java_01 기초Java_01 기초
Java_01 기초
Hong Hyo Sang
 
Java 이해하기 쉬운 코드
Java 이해하기 쉬운 코드 Java 이해하기 쉬운 코드
Java 이해하기 쉬운 코드
Hong Hyo Sang
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
Hong Hyo Sang
 

More from Hong Hyo Sang (11)

Javascript
JavascriptJavascript
Javascript
 
Java_10 람다
Java_10 람다Java_10 람다
Java_10 람다
 
Java_09 이너클래스
Java_09 이너클래스Java_09 이너클래스
Java_09 이너클래스
 
Java_08 collection
Java_08 collectionJava_08 collection
Java_08 collection
 
Java_07 제너릭 메서드
Java_07 제너릭 메서드Java_07 제너릭 메서드
Java_07 제너릭 메서드
 
Java_03 연산자
Java_03 연산자Java_03 연산자
Java_03 연산자
 
Java_04 제어
Java_04 제어Java_04 제어
Java_04 제어
 
Java_02 변수자료형
Java_02 변수자료형Java_02 변수자료형
Java_02 변수자료형
 
Java_01 기초
Java_01 기초Java_01 기초
Java_01 기초
 
Java 이해하기 쉬운 코드
Java 이해하기 쉬운 코드 Java 이해하기 쉬운 코드
Java 이해하기 쉬운 코드
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
 

Java_06 상속

  • 1. JAVA Class 상속 작성자 : 홍효상 이메일 : hyomee@naver.com 소스 : https://github.com/hyomee/JAVA_EDU 프로그램은 사람이 이해하는 코드를 작성. 느려도 꾸준하면 경기에서 이긴다.
  • 2. Content 소스 : https://github.com/hyomee/JAVABASIC 8. Class 상속 1. 개념 2. Class 상속 ( Extends ) 3. Abstract Class 상속 ( Extends ) 4. Interface Class 상속 ( Implements )
  • 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 로 자동 추가 됨