[ 단원 06 ] 상속과 다형성.

Slides:



Advertisements
Similar presentations
Class diagram. 클래스 클래스 이름 연산 속성 2 class Transportation { private int maximumPassenger; private double speed; public void depart(); public void stop();
Advertisements

제 5 장 상속과 다형성.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
상속에 대해 알아봅니다. 상속과 클래스 계층구조 메소드 오버라이딩
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
명품 C++ 프로그래밍 3장. 클래스와 객체.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
객체지향 프로그래밍.
Chap05 상속 5.1 상속의 개요 5.2 멤버 변수의 상속 5.3 메소드의 상속과 오버라이딩(Overriding)
Java Seminar Chapter3.
Java로 배우는 디자인패턴 입문 Chapter 0. UML 과 Design Pattern
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
8. 객체와 클래스 (기본).
명품 JAVA Programming.
10장 객체-지향 프로그래밍 II.
C++ Espresso 제9장 다형성.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
2장. UML 기본 개념.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
프로그래밍 언어론 제 9 장 객체 지향 개념 객체 지향 방법론 객체 모델링 객체 지향 언어 C++ 객체 지향 언어 CLOS
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
명품 JAVA Essential.
명품 Java Programming.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
어서와 Java는 처음이지! 제7장 상속.
2010학년도 2학기 객체지향의 이해.
C++ Programming: chapter 7 – inheritence
인터페이스(Interfaces) 강원대학교.
김 정 석 Web Programming 김 정 석
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
상속과 인터페이스 클래스의 상속에 대하여 인터페이스에 대하여.
제1장 서론.
2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만
Choi Younghwan CSE HUFS
Java 8장. 상속 public class SumTest {
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
소프트웨어 공학 (Software Engineering)
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
C# 09장. 상속성.
Web programming Chap 04 상속 김 정 석
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
JA A V W. 04.
내부 클래스와 내부 인터페이스에 대하여 내부 클래스의 선언 방법과 이용 방법 내부 인터페이스의 선언 방법과 이용 방법
JA V A W. 07 Sb.L.
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
3장,4장 발표 서정우.
6장 클래스(상속).
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
Java 5장. 객체지향 개념 public class SumTest {
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
11장 다형성과 추상 클래스, 인터페이스 Section 1 객체의 형 변환 Section 2 연산자 Section 3 다형성
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
C++ 언어의 특징
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

[ 단원 06 ] 상속과 다형성

학습목표 객체지향의 특징인 상속에 대해 이해하고 프로그래밍에 활용할 수 있다. • 클래스 간의 상속 관계를 구현 • 키워드 this와 super, • 상위 생성자의 호출 super() • 접근 지정자 public protected default private의 활용 객체지향의 특징인 다형성에 대해 이해하고 프로그래밍에 활용할 수 있다. • 참조형에서 변환 연산인 업 캐스팅과 다운 캐스팅 • 객체 확인 연산자 instanceof • 하위 클래스에서 상위 클래스의 메소드를 재정의하는 메소드 오버라이딩의 이해 • 메소드 오버라이딩의 동적 바인딩 이해 추상 클래스와 인터페이스를 이해하고 프로그래밍에 활용할 수 있다. • 추상 클래스의 의미와 구현 • 추상 메소드의 필요성과 구현 • 인터페이스의 의미와 구현 • 인터페이스의 필요성과 구현

1. 상속

상속과 개념과 사례 상속(inheritance) Section 1 상속 p190 상속과 개념과 사례 상속(inheritance) 하위 클래스는 상위 클래스의 특징인 필드와 메소드를 그대로 물려받을 수 있는 특성 차량, 자전거, 자동차, 기차를 클래스로 표현 이들 클래스 간의 계층 구조에서 상속이라는 특징을 파악 하위인 자전거와 자동차 그리고 기차는 상위인 차량이라는 특성을 모두 물려 받을 수 있음

키워드 extends(1) [A는 B이다]는 [이다 관계(is-a relationship)]가 성립 Section 1 상속 키워드 extends(1) [A는 B이다]는 [이다 관계(is-a relationship)]가 성립 B는 상위클래스, A는 하위 클래스 관계로 규정 하위 클래스는 상위 클래스의 필드와 메소드를 상속받을 수 있는 특징 즉 [자동차는 차량이다]가 성립 차량에 정의될 수 있는 필드와 메소드는 모두 자동차에서 상속받을 수 있음 상위 클래스 슈퍼super 클래스 또는 부모parent 클래스, 기본base 클래스 하위 클래스 서브sub 클래스 또는 자식child 클래스, 유도derived 클래스

키워드 extends(2) 하위_클래스이름 extends 상위_클래스이름 모든 클래스의 최상위는 Object라는 클래스 Section 1 상속 키워드 extends(2) 하위_클래스이름 extends 상위_클래스이름 모든 클래스의 최상위는 Object라는 클래스

상위 클래스의 필드와 메소드를 상속 하위 클래스 상위 클래스의 멤버인 필드와 메소드를 다시 구현 없이 사용 Section 1 상속 상위 클래스의 필드와 메소드를 상속 하위 클래스 상위 클래스의 멤버인 필드와 메소드를 다시 구현 없이 사용

Section 1 상속 실습예제 6-1, 6-2 차량을 위한 클래스 차량의 하위 클래스인 자동차를 위한 클래스

자기 자신과 상위 객체의 구분 this와 super this는 객체 자신을 의미하는 키워드 Section 1 상속 자기 자신과 상위 객체의 구분 this와 super this는 객체 자신을 의미하는 키워드 마찬가지로 super는 상위 객체를 의미하는 키워드

Section 1 상속 실습예제 6-3 차량의 하위 클래스인 자동차를 위한 클래스

상위 생성자 호출 생성자 구현 첫 줄에서의 super( ) super()는 상위 클래스의 기본 생성자를 호출하는 문장 Section 1 상속 상위 생성자 호출 생성자 구현 첫 줄에서의 super( ) super()는 상위 클래스의 기본 생성자를 호출하는 문장 생성자의 첫 줄에서 상위 생성자를 호출하는 super() 또는 super(…)를 명시적으로 호출하지 않는다면 첫 줄에서 무조건 자동으로 super()를 호출 자동으로 사용되는 기본 생성자의 첫 줄은 무조건 super()를 호출

상위 객체가 먼저 생성 생성자 호출에 의해 객체가 생성될 때 항상 상위 객체를 위한 필드와 메소드가 먼저 생성된 후 Section 1 상속 상위 객체가 먼저 생성 생성자 호출에 의해 객체가 생성될 때 항상 상위 객체를 위한 필드와 메소드가 먼저 생성된 후 하위 객체가 생성

상위 클래스에서 기본 생성자 구현의 중요성 사용자가 직접 구현하는 생성자에서 첫 줄 Section 1 상속 상위 클래스에서 기본 생성자 구현의 중요성 사용자가 직접 구현하는 생성자에서 첫 줄 상위 생성자의 호출인 super() 또는 super(인자)가 아니면 자동으로 기본 생성자 super()를 호출 이 때 상위 클래스에서 기본 생성자를 사용할 수 없다면 문법 오류가 발생

상위 클래스에서 기본 생성자가 없는 경우의 문제 Section 1 상속 상위 클래스에서 기본 생성자가 없는 경우의 문제 다음 Vehicle과 같이 인자가 있는 생성자를 구현한다면 더 이상 기본 생성자는 구현 없이 자동으로 사용 불가능 하위 클래스 생성자 구현에서 super()를 사용한다면 문법 오류가 발생

Section 1 상속 실습예제 6-4, 6-4 생성자를 구현한 차량 클래스 자동차를 위한 생성자의 구현과 객체의 생성

클래스 접근 지정자 클래스 접근 지정자는 public과 [default] 방식 키워드 public을 사용한 클래스 Section 1 상속 클래스 접근 지정자 클래스 접근 지정자는 public과 [default] 방식 키워드 public을 사용한 클래스 다른 모든 클래스에서 사용 가능 접근 지정자를 아무것도 기술하지 않은 default 클래스 동일한 패키지의 다른 클래스에서만 사용 가능 그러므로 default 클래스는 package 클래스라고도 부름

필드와 메소드 접근 지정자 public, protected [default], private 4가지 종류 Section 1 상속 필드와 메소드 접근 지정자 public, protected [default], private 4가지 종류

Section 1 상속 실습예제 6-6 은행계좌를 추상화한 상위 클래스

Section 1 상속 실습예제 6-7 저축계좌를 표현한 클래스

Section 1 상속 실습예제 6-8 동일한 패키지에서 SavingAccount의 사용

Section 1 상속 실습예제 6-9 다른 패키지의 Account를 상위로 하는 하위 클래스

Section 1 상속 실습예제 6-10 다른 패키지에서 SavingAccount를 사용하는 클래스 CheckTest

2. 다형성

Section 2 다형성 p208 클래스 Person 학교의 교직원과 학생 정보를 표현하기 위한 계층도

Section 2 다형성 실습예제 6-12, 6-13 교직원과 직원 클래스

하위 객체를 상위 클래스형 변수에 대입 업 캐스팅 업 캐스팅의 제약 Section 2 다형성 하위 객체를 상위 클래스형 변수에 대입 업 캐스팅 하위 객체는 상위 클래스형 변수에 대입이 가능, 상위로의 자료형 변환 업 캐스팅은 하위인 교직원은 상위인 사람이라는 개념이 성립 업 캐스팅의 제약 업 캐스팅된 변수로는 하위 객체의 멤버를 참조할 수 없는 제약 Faculty 형 변수 f로는 접근 지정자만 허용하면 모든 멤버를 접근 가능 Person 형 변수 p로는 Person의 멤버인 name과 number만 접근이 가능

Section 2 다형성 실습예제 6-14 참조형의 형 넓히기 변환

상위 객체를 하위 클래스형 변수에 대입 다운 캐스팅 상위 클래스 형을 하위 클래스 형으로 변환 Section 2 다형성 상위 객체를 하위 클래스형 변수에 대입 다운 캐스팅 상위 클래스 형을 하위 클래스 형으로 변환 다운 캐스팅은 반드시 명시적인 형변환 연산자 (하위 클래스)가 필요 만일 형변환 연산자가 없으면 컴파일 시간에 오류 발생

다운 캐스팅의 실행 오류 컴파일 시간 실행 시간 상속 관계만 성립하면 다운 캐스팅은 가능 Section 2 다형성 다운 캐스팅의 실행 오류 컴파일 시간 상속 관계만 성립하면 다운 캐스팅은 가능 실행 시간 실제 객체가 할당되지 않았다면 실행 시간에 오류가 발생

Section 2 다형성 객체 확인 연산자 연산자 instanceof

오버라이딩 메소드 오버라이딩(method overriding) 정의 메소드 오버라이딩의 목적 Section 2 다형성 오버라이딩 메소드 오버라이딩(method overriding) 정의 상위 클래스의 동일한 메소드를 하위 클래스에서 다시 정의하는 것 메소드 재정의(method redefinition) 또는 메소드 대체(method replacement) 라고도 표현 메소드 오버라이딩의 목적 상위 클래스에서 이미 정의한 메소드를 다시 수정하지 않고 하위 클래스에서 좀 더 보완 수정하거나 완전히 새로운 것으로 대체하기 위한 방법

오버라이딩 조건 조건 ❶ 메소드의 반환 값과 메소드 이름, 매개변수는 반드시 같아야 함 Section 2 다형성 오버라이딩 조건 조건 ❶ 메소드의 반환 값과 메소드 이름, 매개변수는 반드시 같아야 함 ❷ 접근 지정자는 하위 클래스의 메소드가 보다 공개적 상위 클래스의 메소드가 public이면 오버라이딩되는 메소드는 public만 가능 상위 메소드가 protected이면 하위 메소드는 public과 protected만 가능 상위 메소드가 default이면 하위 메소드는 public과 protected, default만 가능 ❸ 메소드 수정자가 final, private인 메소드는 오버라이딩될 수 없음

Section 2 다형성 메소드 오버라이딩 예

키워드 final 클래스 앞의 final 메소드 반환형 앞의 지정자 final Section 2 다형성 키워드 final 클래스 앞의 final 클래스가 더 이상 상속되지 못한다는 의미의 키워드 메소드 반환형 앞의 지정자 final 더 이상 하위 클래스에서 메소드 오버라이딩이 허용되지 않도록 지정하는 키워드

Section 2 다형성 동적 바인딩 오버라이딩 메소드 호출 가장 하위 객체의 메소드 실행

Section 2 다형성 실습예제 6-21 메소드 재정의를 알아보는 예제

메소드 오버로딩 이름이 같으며 인자가 다른 여러 메소드 구현 하나의 클래스 또는 상속 관계에 있는 클래스 내부에서 Section 2 다형성 메소드 오버로딩 이름이 같으며 인자가 다른 여러 메소드 구현 하나의 클래스 또는 상속 관계에 있는 클래스 내부에서 인자가 다르나 이름이 같은 메소드가 여러 개 정의될 수 있는 특징

3. 추상클래스와 인터페이스

추상 클래스(1) 추상 클래스(abstract class)의 의미 다른 일반 클래스와 구별되는 특징 Section 3 추상클래스와 인터페이스 p224 추상 클래스(1) 추상 클래스(abstract class)의 의미 클래스 계층구조에서 상위에 위치, 하위 클래스를 대표하는 클래스 추상의 의미대로 “구체적”이지 않은 클래스 보다 구체적인 하위 클래스를 대표하는 클래스 다른 일반 클래스와 구별되는 특징 ① 추상 클래스는 직접 객체화(instantiation)될 수 없다. 즉 생성자를 사용하여 객체를 생성할 수 없다. ② 추상 클래스는 다른 클래스에 의하여 상속되어야 한다. 즉 하위 클래스가 없는 추상클래스는 의미가 없다. ③ 추상 클래스는 하위 클래스가 있어야 하므로 추상 클래스 구현 시 클래스 앞에 키워드 final이 올 수 없다.

Section 3 추상클래스와 인터페이스 p224 추상 클래스(2) 키워드 abstract

추상 클래스 내부의 추상 메소드 추상 메소드 추상 클래스 메소드 몸체가 없는 메소드 Section 3 추상클래스와 인터페이스 추상 클래스 내부의 추상 메소드 추상 메소드 메소드 몸체가 없는 메소드 추상 메소드 정의 시 반환형 앞에 키워드 abstract를 기술하고 메소드 몸체 구현 없이 바로 세미콜론을 삽입 추상 메소드는 private와 final이 사용될 수 없음 추상 클래스 적어도 하나 이상의 추상 메소드를 가진 클래스는 반드시 추상이어야 함 키워드 final 이용 불가능

Section 3 추상클래스와 인터페이스 하위 클래스에서 추상 메소드의 구현

Section 3 추상클래스와 인터페이스 실습예제 6-24 추상 클래스 Shape 구현

실습예제 6-25, 26 Circle.java Rectangle.java Section 3 추상클래스와 인터페이스 실습예제 6-25, 26 Circle.java 원을 표현한 클래스로 상위 클래스 Shape의 추상 메소드 draw( )를 구현 Rectangle.java 사각형을 표현한 클래스로 상위 클래스 Shape의 추상 메소드 draw( )를 구현 package inheritance.abstratinterface;   public class Circle extends Shape { public class Rectangle extends Shape { double radius; double width; double height; public Circle(double x, double y, double radius) { super(x, y); public Rectangle(double x, double y, double width, double height) { this.radius = radius; } public void draw() { this.width = width; super.drawCenter(); this.height = height; System.out.printf("반지름: %f, ", radius); System.out.printf("원 면적: %f\n", radius*radius*Math.PI); System.out.printf("가로: %f, 세로: %f, ", width, height); System.out.printf("사각형 면적: %f\n", width*height);

Section 3 추상클래스와 인터페이스 실습예제 6-27 추상 클래스 Shape 형의 변수로 객체의 추상 메소드 호출

인터페이스의 의미와 정의 IT에서 인터페이스 자바에서 인터페이스 인터페이스는 컴퓨터와 다른 주변기기를 연결하는 표준을 의미 Section 3 추상클래스와 인터페이스 인터페이스의 의미와 정의 IT에서 인터페이스 인터페이스는 컴퓨터와 다른 주변기기를 연결하는 표준을 의미 자바에서 인터페이스 해야 할 작업의 구체적 구현 없이 기능만 선언한 클래스 하위 클래스가 수행해야 하는 메소드와 필요한 상수만을 미리 추상적으로 정의해 놓은 특별한 클래스 인터페이스는 다중 상속(multiple inheritance)을 지원 자바의 일반 클래스는 다중 상속을 지원하지 않음 키워드 interface

인터페이스 상속 키워드 extends 키워드 implements 인터페이스를 상속받는 클래스 인터페이스들 간의 상속 Section 3 추상클래스와 인터페이스 인터페이스 상속 키워드 extends 인터페이스들 간의 상속 다중 상속인 경우 상위 인터페이스 여러 개를 쉼표로 구분하여 나열 키워드 implements 인터페이스를 상속받는 하위 클래스를 정의할 때는 사용 인터페이스를 상속받는 클래스 상위 인터페이스에서 정의한 모든 추상 메소드를 구현

Section 3 추상클래스와 인터페이스 인터페이스 설계