No Slide Title

Similar documents
q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint Presentation

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 2강

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

No Slide Title

Design Issues

Microsoft PowerPoint - chap11

Microsoft PowerPoint - java2 [호환 모드]

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lect04.pptx

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

JAVA PROGRAMMING 실습 07. 상속

C++ Programming

Microsoft PowerPoint 장강의노트.ppt

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

쉽게 풀어쓴 C 프로그래밍

제11장 프로세스와 쓰레드

Network Programming

PowerPoint Presentation

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint Template

소프트웨어공학개론 강의 5: 객체지향개념 최은만동국대학교컴퓨터공학과

Slide 1

PowerPoint Presentation

슬라이드 1

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - 04_OOConcepts(2010).pptx

PowerPoint Presentation

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

슬라이드 1

Microsoft Word - EEL2 Lab4.docx

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

거리계산문제 간단한문제 n 2 차원평면상의두점사이의거리를구하는프로그램을작성해보자 n 해법 : 피타고라스정리 거리구하는공식 n 두점 (x 1, y 1 ) 과 (x 2, y 2 ) 사이의거리 d n 제곱근은 Math.sqrt, 제곱은 Math.ow 로구함 4 절차지향적거리

Spring Data JPA Many To Many 양방향 관계 예제

Microsoft Word - EEL2 Lab5 예외처리와 스레드.docx

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - java1 [호환 모드]

5장.key

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

(Microsoft PowerPoint - java2-lecture3.ppt [\310\243\310\257 \270\360\265\345])

01-OOPConcepts(2).PDF

비긴쿡-자바 00앞부속

Microsoft PowerPoint - additional07.ppt [호환 모드]

PowerPoint 프레젠테이션

PowerPoint Presentation

C++ Programming

PowerPoint Presentation

Cluster management software

No Slide Title

17장 클래스와 메소드

Java Programing Environment

슬라이드 1

A Tour of Java IV

슬라이드 1

자바 프로그래밍

슬라이드 1

C++ Programming

PowerPoint 프레젠테이션

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

Cluster management software

PowerPoint Template

PowerPoint Template

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

ThisJava ..

No Slide Title

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint 프레젠테이션

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

JVM 메모리구조

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint - lec08_1311.ppt [호환 모드]

A Tour of Java V

Microsoft PowerPoint - lec7_package [호환 모드]

쉽게

PowerPoint Template

JUNIT 실습및발표

Blog

PowerPoint 프레젠테이션

Transcription:

상속 이충기 명지대학교컴퓨터공학과

상속 Q: 건설회사는기존아파트와조금다르거나추가적인특징들을가진새아파트를지을때어떻게하는가? A: 2

상속 상속 (inheritance) 은클래스들을연관시키는자연스럽고계층적인방법이다. 상속은객체지향프로그래밍의가장중요한개념중의하나이다. 상속은 은 이다 라는관계 (is-a relationship) 를나타낸다. 이관계를적용하여클래스들을상하관계로연결하는것이상속이다. 3

상속 상속은기존클래스로부터새로운클래스를만드는것이다. 기존클래스는부모클래스혹은상위클래스 (superclass) 라고부른다. 새로만들어진클래스는자식클래스혹은하위클래스 (subclass) 라고부른다. 자식클래스는부모클래스에정의된변수들과메소드들을상속받는다. 4

상속의목적 한클래스를처음부터새로만들려고하면필요한변수들과메소드들을전부다새로만들어야한다. 그러나상속을이용하여기존클래스로부터새클래스를만들면일이훨씬수월해진다. 왜냐하면기존클래스의변수들과메소드들중수정할필요가있는것만재정의하고새로필요한변수들과메소드들만정의하면되기때문이다. 상속의주목적은새로운소프트웨어를만들기위해기존의소프트웨어를재사용함으로써기존소프트웨어의설계, 구현및시험에투입된모든시간과노력을재활용하는것이다. 5

하위클래스만들기 상속관계를설정하기위해서 extends 라는키워드를사용한다. // subclass_name 라는클래스의정의 class subclass_name extends superclass_name { // 변수들과메소드들 6

하위클래스만들기 subclass_name 클래스는 superclass_name 이라는클래스로부터변수들과메소드들을자동적으로상속받는다. 상속받은변수들과메소드들중수정할필요가있다면재정의하여사용할수있다. 새로필요한변수들과메소드들이있다면새로정의하여사용한다. 7

예 : 하위클래스만들기 // 예금계좌를모델한다 public class Account { double balance; // 잔고 public double getbalance() { return balance; public void deposit( double amount) { balance = balance + amount; public void withdraw(double amount) { balance = balance - amount; 8

예 : 하위클래스만들기 // 저축예금계좌를모델한다 public class SavingsAccount extends Account { double interestrate; // 이율 public double getinterestrate() { return interestrate; public void setinterestrate(double rate) { interestrate = rate; 9

상속 상속관계는자주클래스그림 (class diagram) 으로보여진다. 화살표가부모클래스를가리킨다. 예금 저축예금 위에서 저축예금은예금이다 라는관계가성립한다. 그러나반대방향으로의관계는성립하지않는다. 10

메소드재정의 (Overriding) 하위클래스는필요하다면상속받은메소드의정의를바꿀수있다. 새메소드는상위클래스의메소드와같은머리부를가져야하나메소드몸체는달라야한다. 메소드를호출하는객체의유형이어느메소드가호출되었는지를결정한다. 11

메소드재정의 부모메소드는 super 참조를사용하여명확하게호출될수있다. 한메소드가 final 메소드로선언된다면재정의될수없다. 재정의의개념은변수들에도적용될수있다. 그러나일반적으로권장되지않는다. 12

메소드다중정의대재정의 메소드다중정의 (Overloading) 는같은클래스안에같은이름을가지나다른머리부를갖는여러메소드들이있다는것을의미한다. 메소드재정의 (Overriding) 는같은머리부를갖는두메소드를다룬다. 한메소드는부모클래스에있고다른메소드는자식클래스에있다. 메소드다중정의는우리가비슷한연산을다른데이터에대해다르게정의하게한다. 메소드재정의는우리가비슷한연산을다른객체유형에대해다르게정의하게한다. 13

클래스계층 한클래스의자식클래스가또다른클래스의부모클래스가될수있다. 이와같이부모자식관계를확장시켜계층구조로만든것이클래스계층 (Class Hierarchy) 이다. 같은부모클래스의두자식클래스들은형제들 ( 자매들 ) 이라고부른다. 클래스들의공통적인특징들은클래스계층의가능한위에놓여져야한다. 14

예 : 클래스계층도 교직원 교원 직원 전임교원시간강사계약직원 15

Object 클래스 Object 클래스는모든클래스의최상위클래스이다. 이클래스는 java.lang 패키지에정의되어있다. 모든클래스는 Object 클래스로부터상속받는다. Object 클래스는몇개의유용한메소드들을가지고있다. 예 : public boolean equals (Object o) public String tostring () 한클래스내에 tostring( ) 메소드를정의하면 Object 클래스가제공하는 tostring( ) 메소드를재정의하는것이다. 위의메소드들이어떤객체에서도호출되도록한다. 16

상속과범위 변수나메소드의범위 (Scope) 는변수나메소드가의미를가지는코드의블록이다. 상속으로말미암아이범위가상위클래스혹은그이상으로확장될수있다. 17

상속과범위 변수 : 자바는먼저변수가나온메소드를조사한다. 지역변수혹은매개변수인지를확인한다. 다음으로현클래스의변수인지를확인한다. 다음으로상위클래스의변수인지를확인한다. 자바는더이상확인할상위클래스가없을때까지상속계층구조를올라가면서확인한다. 메소드 : 메소드가클래스내에정의된메소드인지를확인한다. 다음으로상위클래스에서정의된메소드인지를확인한다. 자바는더이상확인할상위클래스가없을때까지상속계층구조를올라가면서확인한다. 18

범위명시 자바는변수나메소드가두가지의범위규칙중하나를따르라고명시할수있다 : super 예약어 : 상위클래스의변수나메소드를나타내는예약어예 : super.setname( ) this 예약어 : 현객체의메소드나변수를나타내는예약어예 : this.setname( ) 19

예 : 상속과범위 super(xxx) // 상위클래스의생성자메소드를호출한다 super.xxx // 상위클래스의변수를나타낸다 super.xxx( ) // 상위클래스의메소드를호출한다 this(xxx) this.xxx this.xxx( ) // 현클래스의생성자메소드를호출한다 // 현클래스의변수를나타낸다 // 현클래스의메소드를호출한다 주 : 다음과같이할수없다 super.super.<somemethod> 20

예제프로그램 : 직원 // 직원을모델한다 class Employee { public String name; public double salary; public Employee (String name, double salary) { this.name = name; this.salary = salary; public String getname() { return name; public void raisesalary() { salary *= 1.3; 21

예제프로그램 : 매니저 // 매니저를모델한다 class Manager extends Employee { public double bonus; public Manager (String n, double s, double b) { super(n, a); bonus = b; public void raisesalary() { // 재정의 salary *= 1.2; 22

예제프로그램 : 임원 // 임원을모델한다 class Executive extends Manager { public double stock_option; // 스톡옵션 public Executive (String n, double s, double b, double so) { super(n, s, b); stock_option = so; public void raisesalary() { // 재정의 salary = salary * 1.1; 23

예제프로그램 : 드라이버프로그램 // Employee, Manager 와 Executive 객체를만들어시험한다 class InheritanceTest { public static void main(string[] args) { Employee emp = new Employee(" 홍길동, 1000.0); Manager mng = new Manager(" 강감찬, 2000.0, 500.0); Executive exc = new Executive( 이순신, 4000.0, 1000.0, 100.0); emp.raisesalary(); mng.raisesalary(); exc. raisesalary(); System.out.println(emp.getName() + " " + emp.salary); System.out.println(mng.getName() + " " + mng.salary + " " + mng.bonus); System.out.println(exc.getName() + " " + exc.salary + " " + exc.bonus + " " + exc.stock_option); 24

생성자메소드와상속 자바의규칙 : 생성자메소드의첫줄이상위클래스의생성자메소드를호출하는문장이아니라면자바는 super( ) 를첫줄로넣는다. 따라서상위클래스의기본생성자메소드가처음에호출된다. 이규칙의예외 : this(params) 를통해다른생성자메소드를호출한다면 super( ) 에대한호출을연기할것이다. 상위클래스의다른생성자메소드를호출하기위해서그메소드를직접호출하라예 : super(name) 25

가시성수정자 가시성수정자 (Visibility Modifier) 는클래스, 변수, 메소드앞에위치하여그러한것들이이용될수있는접근의범위를나타낸다. public 으로선언된변수들과메소드들은어디서나이용할수있다. private 로선언된것들은정의된클래스내에서만이용할수있다. protected 로선언된것들은자식클래스들혹은자손클래스들내에서이용할수있다. 26

가시성과접근성 가시성수정자 : 접근여부 : public protected private 모든클래스 Yes No No 하위클래스 Yes Yes No 현클래스의 Yes Yes Yes 객체 항상가시성수정자를명시하라 27

요약 상속 하위클래스만들기 클래스계층 상속과범위 가시성수정자 28