Top Banner
Chap05 상상 Chap05 상상 5.1 상상상 상상 5.2 상상 상상상 상상 5.3 상상상상 상상상 상상상상상 (Overriding) 5.4 상상상 super 5.5 상상상 상상상 5.6 상상상 상상상 5.7 상상상 instanceof 5.8 상상상상상상 상상상상상 5.9 상상상 final
21

Chap05 상속

Jan 11, 2016

Download

Documents

ahava

5.1 상속의 개요 5.2 멤버 변수의 상속 5.3 메소드의 상속과 오버라이딩 (Overriding) 5.4 예약어 super 5.5 상속과 생성자 5.6 객체의 형변환 5.7 연산자 instanceof 5.8 추상클래스와 추상메소드 5.9 예약어 final. Chap05 상속. 5.1 상속의 개요. OOP 의 주요 특성인 모듈의 재사용과 코드의 간결성 제공 상속의 개념을 이용하여 클래스의 계층구조 구성 JDK 에서 제공되는 클래스로부터 상속 받아 자바 프로그램 작성 - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Chap05  상속

Chap05 상속

Chap05 상속5.1 상속의 개요5.2 멤버 변수의 상속5.3 메소드의 상속과 오버라이딩 (Overriding)5.4 예약어 super5.5 상속과 생성자5.6 객체의 형변환5.7 연산자 instanceof5.8 추상클래스와 추상메소드5.9 예약어 final

Page 2: Chap05  상속

Chap05 상속

5.1 상속의 개요OOP 의 주요 특성인 모듈의 재사용과 코드의 간결성 제공상속의 개념을 이용하여 클래스의 계층구조 구성JDK 에서 제공되는 클래스로부터 상속 받아 자바 프로그램 작성자바에서의 모든 클래스는 상위 클래스를 가진다자바 프로그램의 최상위 클래스는 java.lang.Object 클래스이다 . 상위 클래스를 지정하기 위해 “ extends” 키워드 사용

상속이 포함된 클래스 선언 형식

[public/final/abstract] class 클래스이름 extends 상위클래스이름 { .......... // 멤버변수선언 .......... // 생성자 .......... // 메소드선언}

Page 3: Chap05  상속

Chap05 상속

멤버 변수 상속의 예

class A { int aa = 1;}class B extends A { int bb = 2;}class C extends B { int cc = 3;}class Dabc { public static void main(String[] args) { C objc = new C(); System.out.println("objc 객체의 객체속성변수 aa 의 값은 " + objc.aa); System.out.println("objc 객체의 객체속성변수 bb 의 값은 " + objc.bb); System.out.println("objc 객체의 객체속성변수 cc 의 값은 " + objc.cc); }}

5.2 멤버 변수의 상속

출력 결과objc 객체의 객체속성변수 aa 의 값은 1objc 객체의 객체속성변수 bb 의 값은 2objc 객체의 객체속성변수 cc 의 값은 3

Page 4: Chap05  상속

Chap05 상속

5.2 멤버 변수의 상속접근 한정자 : protected 같은 패키지 내의 클래스와 같은 패키지는 아니지만 상속된 클래스에서 사용

가능한 접근 한정자

Page 5: Chap05  상속

Chap05 상속

5.2 멤버 변수의 상속

패키지 패키지 11패키지 패키지 11 패키지 패키지 22패키지 패키지 22

public class A1 { int a; public int b; protected int c; private int d; void am() {} public void bm() {} protected void cm() {} private dm() {}}

public class A2 { A1 o = new A1(); o.a // 접근가능 o.b // 접근가능 o.c // 접근가능 o.d // 접근불가능 o.am() // 접근가능 o.bm() // 접근가능 o.cm() // 접근가능 o.dm() // 접근불가능 }

public class A3 extends A1 { a // 접근가능 b // 접근가능 c // 접근가능 d // 접근불가능 am() // 접근가능 bm() // 접근가능 cm() // 접근가능 dm() // 접근불가능 }

상속

같은 패키지내에서 상속된 클래스

같은 패키지내에의 클래스

public class A4 extends A1 { a // 접근불가능 b // 접근가능 c // 접근가능 d // 접근불가능 am() // 접근불가능 bm() // 접근가능 cm() // 접근가능 dm() // 접근불가능 }

public class A5 { A1 o = new A1(); o.a // 접근불가능 o.b // 접근가능 o.c // 접근불가능 o.d // 접근불가능 o.am() // 접근불가능 o.bm() // 접근가능 o.cm() // 접근불가능 o.dm() // 접근불가능 }

다른 패키지이지만 상속된 클래스

다른 패키지의 클래스

접근 한정자의 종합적인 예

Page 6: Chap05  상속

Chap05 상속

5.2 멤버 변수의 상속예제 : Inheritence1.java

예제 : Inheritence2.java

예제 : Inheritence3.java

Page 7: Chap05  상속

Chap05 상속

5.3 메소드 상속과 오버라이딩

오버로딩 (overloading) : 4 장 참조 같은 클래스 내에 같은 이름의 생성자나 메소드를 사용하는 행위 매개변수의 개수와 타입이 달라야 한다

오버라이딩 (overriding) 상속관계에 있는 클래스들간에 같은 이름의 메소드를 정의하는 행위 기존 클래스의 메소드 구현 부분만 약간 변화시켜 새로운 클래스를

생성할 수 있다 매개변수의 개수와 타입이 같아야 한다

오버로딩과 오버라이딩은 객체지향 언어의 주요 개념인 다형성 (polymorphism) 을 구현한다

Page 8: Chap05  상속

Chap05 상속

5.3 메소드 상속과 오버라이딩

예제 : Inheritence4.java

예제 : OverrideExam1.java

예제 : OverrideExam2.java

Page 9: Chap05  상속

Chap05 상속

5.4 예약어 super

super 의 사용 하위 클래스에 의해 가려진 상위 클래스의 멤버 변수나 메소드에 접근할

super. 객체변수super. 메소드이름 ( 매개변수 )

상위 클래스의 생성자를 호출할 때

super( 매개변수 )

Page 10: Chap05  상속

Chap05 상속

5.4 예약어 super

예제 : InheritenceSuper.java

예제 : OverrideExam3.java

Page 11: Chap05  상속

Chap05 상속

5.5 상속과 생성자

상속된 클래스로부터 객체가 생성될 때 상위 클래스의 생성자가 하위 클래스의 생성자보다 먼저 수행 상위 클래스의 묵시적인 생성자 ( 매개변수가 없는 ) 가 수행 묵시적인 생성자가 아닌 다른 생성자를 호출 ( 오버로딩의 경우 ) 하고자

한다면 예약어 super 를 사용하여 명시적으로 호출 super 문장은 반드시 첫번째 라인에 와야 한다

Page 12: Chap05  상속

Chap05 상속

5.5 상속과 생성자

예제 : Constructors1.java

예제 : Constructors2.java

Page 13: Chap05  상속

Chap05 상속

5.6 객체의 형변환상속 관계의 클래스에서 객체의 형변환 가능

class Acast { int a=1; }class Bcast extends Acast { int b=2; }class Ccast extends Bcast { int c=3; }

class TestCasting { public static void main(String[] args) { Acast refA; // Acast 타입의 객체 refA 선언 refA = new Ccast(); /* Acast 타입의 객체 참조 변수 refA 에 Ccast 클래스의 객체를 생성하여 할당 */ System.out.println("refA.a 의 값은 "+refA.a); }}

출력결과refA.a 의 값은 1

Page 14: Chap05  상속

Chap05 상속

5.6 객체의 형변환

앞의 프로그램을 다음과 같이 수정

class TestCasting { public static void main(String[] args) {

Acast refA; refA = new Ccast();

System.out.println("refA.c 의 값은 "+ refA.c ); // Ccast 클래스의 멤버인 c 에 접근 시도 . 오류 발생

} }

TestCasting.java:13: No variable c defined in class Acast. System.out.println("refA.c 의 값은 "+refA.c); ^ 1 error

Page 15: Chap05  상속

Chap05 상속

5.6 객체의 형변환

앞의 프로그램을 반대로 다음과 같이 수정

class TestCasting { public static void main(String[] args) { Ccast refC = new Acast(); // 오류 발생 System.out.println("refC.a 의 값은 "+refC.a); } }

TestCasting.java:12: Incompatible type for declaration. Explicit cast needed to convert Acast to Ccast. Ccast refC = new Acast(); ^1 error

Page 16: Chap05  상속

Chap05 상속

5.6 객체의 형변환다형성을 나타내는 프로그램 예

class Student { public String toString() { return "Student"; } } class GStudent extends Student { public String toString() { return "GStudent"; } } class UStudent extends GStudent { public String toString() { return "UStudent"; } } /* 위의 3 개의 클래스는 상속관계에 있으면서 상위 클래스의 메소드를

오버라이딩하고 있다 */ public class PBTest { public static void main(String args[]) { Student s = new UStudent(); System.out.println(s.toString()); s = new GStudent(); System.out.println(s.toString()); s = new Student(); System.out.println(s.toString()); } }

출력결과

UStudent GStudent Student

Page 17: Chap05  상속

Chap05 상속

5.6 객체의 형변환

예제 : OverridingCast.java

Page 18: Chap05  상속

Chap05 상속

5.7 연산자 instanceof

객체가 특정 클래스나 인터페이스로부터 생성된 객체인지를 판별해주는 관계 연산자 ( 표 3-6)형식

객체참조변수 instanceof type

예제 : InstanceOf.java

Page 19: Chap05  상속

Chap05 상속

5.8 추상 클래스와 추상 메소드

추상 클래스 하위 클래스에서 구현될 추상적인 기능만을 추상 메소드로 선언 추상 메소드는 기능이 무엇 (What) 인지만을 선언하고 구현부분이 없는

메소드이다 추상 메소드는 하위 클래스에서 오버라이딩되어 구현된다 추상 클래스는 추상 메소드 외에 일반적인 속성과 메소드를 가질 수

있다 .

abstract class 클래스이름 { ……..// 일반 속성과 메소드 기술 abstract void 추상메소드이름 (); // 추상 메소드 선언 ……..}

Page 20: Chap05  상속

Chap05 상속

5.8 추상 클래스와 추상 메소드

예제 : AbstractClass.java

Page 21: Chap05  상속

Chap05 상속

5.9 예약어 final

final 을 3 가지 용도로 사용 상수로 사용될 객체 속성 변수 메소드에 final 을 붙이면 하위 클래스에서 오버라이딩 할 수 없다 클래스에 final 을 붙여 하위 클래스를 가지지 못하게 한다

final 을 사용하는 이유 보안과 설계부분을 명확하게 하기 위해