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

Similar documents
PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 08.다형성

쉽게 풀어쓴 C 프로그래밍

예제 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

PowerPoint Presentation

Design Issues

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

PowerPoint Presentation

Microsoft PowerPoint - 2강

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - chap11

PowerPoint Presentation

JAVA PROGRAMMING 실습 07. 상속

PowerPoint 프레젠테이션

Microsoft PowerPoint - java2 [호환 모드]

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

5장.key

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

자바 프로그래밍

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

Microsoft PowerPoint - java1-lecture5.ppt [호환 모드]

PowerPoint Presentation

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

Network Programming

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

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 05. 객체의 활용

슬라이드 1

PowerPoint Presentation

PowerPoint 프레젠테이션

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

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

JAVA PROGRAMMING 실습 09. 예외처리

No Slide Title

PowerPoint 프레젠테이션

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++ Programming

Microsoft PowerPoint - java1-lecture5.ppt [호환 모드]

Slide 1

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

PowerPoint Presentation

17장 클래스와 메소드

비긴쿡-자바 00앞부속

Microsoft PowerPoint - Lect04.pptx

PowerPoint Presentation

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

PowerPoint 프레젠테이션

쉽게

JVM 메모리구조

Microsoft Word - java19-1-midterm-answer.doc

Java ~ Java program: main() class class» public static void main(string args[])» First.java (main class ) /* The first simple program */ public class

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint Presentation

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

PowerPoint Presentation

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

01-OOPConcepts(2).PDF

05-class.key

Microsoft PowerPoint - 04-UDP Programming.ppt

gnu-lee-oop-kor-lec10-1-chap10

Microsoft PowerPoint - hci2-lecture12 [호환 모드]

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

제11장 프로세스와 쓰레드

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

PowerPoint 프레젠테이션

PowerPoint Template

Microsoft PowerPoint - Java7.pptx

PowerPoint Template

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint 프레젠테이션

Microsoft PowerPoint - VB.NET_06.pptx

Microsoft Word - EEL2 Lab4.docx

Spring Boot/JDBC JdbcTemplate/CRUD 예제

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

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

Cluster management software

슬라이드 1

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

PowerPoint Template

Chapter 6 Objects and Classes

Microsoft PowerPoint - lec12 [호환 모드]

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

Microsoft PowerPoint - 5장

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

Microsoft PowerPoint - CSharp-10-예외처리

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

09-interface.key

PowerPoint Template

Microsoft PowerPoint 장강의노트.ppt

Transcription:

어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성

서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가?

class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base { public Derived() { System.out.println("Derived() 생성자 "); ; public class Test { public static void main(string[] args) { Derived r = new Derived(); ;

생성자의호출순서는 ( 부모클래스의생성자 ) -> ( 자식클래스의생성자 ) 순으로된다.

super 를이용하여서명시적으로수퍼클래스의생성자호출 class Shape { ; public class Rectangle extends Shape { ; public Shape(String msg) { public Rectangle(){ System.out.println("Shape 생성자 () " + msg); super("from Rectangle"); // 명시적인호출 System.out.println("Rectangle 생성자 ()");

class Shape { public Shape(String msg) { System.out.println("Shape 생성자 ()"); ; class Rectangle extends Shape { public Rectangle() { ; System.out.println("Rectangle 생성자 ()"); 1 부터 10 까지의정수의합 = 55 Shape 생성자 Rectangle 생성자

다형성 (polymorphism) 이란객체들의타입이다르면똑같은메시지가전달되더라도서로다른동작을하는것

클래스 A 의참조변수로클래스 B 의객체를참조할수는없다. class A { A() { class B { B() { public class TypeTest1 { public static void main(string args[]) { A a = new B(); // NO!

부모클래스의참조변수는자식클래스의객체를참조할수있다! class A { A() { class B extends A { B() { public class TypeTest1 { public static void main(string args[]) { A a = new B(); // OK!

하나의예로 Rectangle, Triangle, Circle 등의도형클래스가부모클래스인 Shape 클래스로부터상속되었다고가정하자.

class Shape { protected int x, y; class Rectangle extends Shape { private int width, height; class Triangle extends Shape { private int base, height; class Circle extends Shape { private int radius;

public class ShapeTest { public static void main(string arg[]) { Shape s1, s2; s1 = new Shape(); // 1 당연하다. s2 = new Rectangle(); // 2 Rectangle 객체를 // Shape 변수로가리킬수있을까?

서브클래스객체는수퍼클래스객체를포함하고있기때문이다.

public class ShapeTest { public static void main(string arg[]) { Shape s= new Rectangle(); Rectangle r = new Rectangle(); s.x = 0; s.y = 0; s.width = 100; s.height = 100; 1 부터 10 까지의정수의합 = 55 width cannot be resolved or is not a field height cannot be resolved or is not a field 컴파일오류가발생한다. s 를통해서는 Rectangle 클래스의필드와메소드에접근할수없다.

Shape s = new Rectangle(); s 를통하여 Rectangle 클래스의필드와메소드를사용하고자할때는어떻게하여야하는가? ((Rectangle) s).setwidth(100);

서브클래스참조변수로수퍼클래스객체를참조하는것으로일반적인상황에서는컴파일오류이다. Rectangle r; r = new Shape(); // NOT OK!

만약서브클래스객체인데형변환에의하여일시적으로수퍼클래스참조변수에의하여참조되고있는경우는가능 Rectangle r; Shape s; s = new Rectangle(); r = (Rectangle)s; r->width = 100; r->height = 100;

다형성은객체들이동일한메시지를받더라도각객체의타입에따라서서로다른동작을하는것

class Shape { protected int x, y; public void draw() { System.out.println("Shape Draw"); class Rectangle extends Shape { private int width, height; public void draw() { System.out.println("Rectangle Draw");

class Triangle extends Shape { private int base, height; public void draw() { System.out.println("Triangle Draw"); class Circle extends Shape { private int radius; public void draw() { System.out.println("Circle Draw");

public class ShapeTest { public static void main(string arg[]) { Shape s1, s2, s3, s4; s1 = new Shape(); s2 = new Rectangle(); s3 = new Triangle(); s4 = new Circle(); s1.draw(); s2.draw(); s3.draw(); s4.draw();

Shape Draw Rectangle Draw Triangle Draw Circle Draw

메소드호출을실제메소드의몸체와연결하는것을바인딩 (binding) 이라고한다. 자바가상머신 (JVM) 은실행단계에서객체의타입을보고적절한메소드를호출하게된다. 이것을동적바인딩 (dynamic binding) 또는가상메소드호출 (virtual method invocation) 이라고한다.

public class ShapeTest { private static Shape arrayofshapes[]; public static void main(string arg[]) { init(); drawall(); public static void init() { arrayofshapes = new Shape[3]; arrayofshapes[0] = new Rectangle(); arrayofshapes[1] = new Triangle(); arrayofshapes[2] = new Circle(); public static void drawall() { for (int i = 0; i < arrayofshapes.length; i++) { arrayofshapes[i].draw();

Rectangle Draw Triangle Draw Circle Draw

class Cylinder extends Shape { private int radius, height; public void draw(){ System.out.println("Cylinder Draw"); 위와같은새로운클래스가추가되더라도다른코드는변경할필요가없다.

메소드의매개변수로부모클래스참조변수를이용한다. -> 다형성을이용하는전형적인방법

public class ShapeTest { public static void printlocation(shape s) { System.out.println("x=" + s.x + " y=" + s.y); public static void main(string arg[]) { Rectangle s1 = new Rectangle(); Triangle s2 = new Triangle(); Circle s3 = new Circle(); printlocation(s1); printlocation(s2); printlocation(s3);

강아지와고양이를나타내는클래스를작성하자. 이들클래스의부모클래스로 Animal 클래스를정의한다. 강아지와고양이클래스의 sound() 메소드를호출하면각동물들의소리가출력되도록프로그램을작성해보자. Animal 클래스의 sound() 멍멍야옹

class Animal { void sound() { System.out.println("Animal 클래스의 sound()"); class Dog extends Animal { void sound() { System.out.println(" 멍멍 "); class Cat extends Animal { void sound() { System.out.println(" 야옹 ");

public class DynamicCallTest { public static void main(string args[]) { Animal animal = new Animal(); Dog dog = new Dog(); Cat cat = new Cat(); Animal obj; obj = animal; obj.sound(); obj = dog; obj.sound(); obj = cat; obj.sound();

is-a 관계 : ~ 은 ~ 이다 와같은관계 상속은 is-a 관계이다. 자동차는탈것이다 (Car is a Vehicle). 강아지는동물이다 (Dog is a animal).