PowerPoint 프레젠테이션

Similar documents
5장.key

JAVA PROGRAMMING 실습 07. 상속

JAVA PROGRAMMING 실습 08.다형성

<4D F736F F F696E74202D205B4A415641C7C1B7CEB1D7B7A1B9D65D35C0E5BBF3BCD3B0FAB4D9C7FCBCBA>

Microsoft PowerPoint - 5장

PowerPoint 프레젠테이션

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

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

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

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

Microsoft PowerPoint - 6주차.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - 2강

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

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint Presentation

Design Issues

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

C++ Programming

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

슬라이드 1

JAVA PROGRAMMING 실습 05. 객체의 활용

쉽게 풀어쓴 C 프로그래밍

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

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint 프레젠테이션

제11장 프로세스와 쓰레드

Microsoft PowerPoint - chap11

No Slide Title

Microsoft PowerPoint - java2 [호환 모드]

PowerPoint Presentation

PowerPoint Presentation

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

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

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µå

JAVA PROGRAMMING 실습 05. 객체의 활용

비긴쿡-자바 00앞부속

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

설계란 무엇인가?

PowerPoint Presentation

Slide 1

쉽게 풀어쓴 C 프로그래밍

Chapter 6 Objects and Classes

Microsoft Word - java18-1-final-answer.doc

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint - Lect04.pptx

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

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

슬라이드 1

Microsoft PowerPoint - Chapter 6.ppt

09-interface.key

C++ Programming

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

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 09. 예외처리

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

쉽게 풀어쓴 C 프로그래밍

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

교육자료

PowerPoint 프레젠테이션

Slide 1

자바 프로그래밍

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - 04-UDP Programming.ppt

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

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

오버라이딩 (Overriding)

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

PowerPoint Presentation

강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상 2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌

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

PowerPoint Presentation

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

슬라이드 1

Network Programming

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

01-OOPConcepts(2).PDF

PowerPoint Template

PowerPoint Template

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

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

Microsoft Word - EEL2 Lab4.docx

Microsoft PowerPoint - CSharp-10-예외처리

슬라이드 1

Microsoft PowerPoint - Chap12-OOP.ppt

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

쉽게 풀어쓴 C 프로그래밍

Cluster management software

Microsoft PowerPoint 장강의노트.ppt

int total = 0; for( int i=1; i<=5; i++ ) { for( int j=1; j<=i; i++ ) { total ++; System.out.println( total ); 대구분 : 객체와 Class 소구분 : 객체생성과사용 / Class 선언

Transcription:

명품 JAVA Essential 1

2 학습목표 1. 객체지향상속과자바상속개념이해 2. 클래스상속작성및객체생성 3. protected 접근지정 4. 상속시생성자의실행과정 5. 업캐스팅과 instanceof 연산자 6. 메소드오버라이딩과동적바인딩의이해및활용 7. 추상클래스 8. 인터페이스

상속 (inheritance) 3 객체지향상속 자식이부모유전자를물려받는것과유사한개념

상속의필요성 상속이없는경우중복된멤버를가진 4 개의클래스 상속을이용한경우중복이제거되고간결해진클래스구조 4

클래스상속과객체 5 상속선언 extends 키워드로선언 부모클래스를물려받아확장한다는의미 부모클래스 -> 슈퍼클래스 (super class) 자식클래스 -> 서브클래스 (sub class) class Point { int x, y;... 서브클래스 슈퍼클래스 class ColorPoint extends Point { // Point 를상속받는 ColorPoint 클래스선언... ColorPoint 는 Point 를물려받으므로, Point 에선언된필드와메소드선언필요없음

예제 5-1 : 클래스상속 6 (x, y) 의한점을표현하는 Point 클래스와이를상속받아점에색을추가한 ColorPoint 클래스를만들고활용해보자. class Point { private int x, y; // 한점을구성하는 x, y 좌표 void set(int x, int y) { this.x = x; this.y = y; void showpoint() { // 점의좌표출력 System.out.println("(" + x + "," + y + ")"); // Point 를상속받은 ColorPoint 선언 class ColorPoint extends Point { private String color; // 점의색 void setcolor(string color) { this.color = color; void showcolorpoint() { // 컬러점의좌표출력 System.out.print(color); showpoint(); // Point 의 showpoint() 호출 public class ColorPointEx { public static void main(string [] args) { Point p = new Point(); // Point 객체생성 p.set(1, 2); // Point 클래스의 set() 호출 p.showpoint(); (1,2) red(3,4) ColorPoint cp = new ColorPoint(); cp.set(3, 4); // Point 클래스의 set() 호출 cp.setcolor("red"); // ColorPoint의 setcolor() 호출 cp.showcolorpoint(); // 컬러와좌표출력

서브클래스객체의모양 7 슈퍼클래스객체와서브클래스의객체는별개 서브클래스객체는슈퍼클래스멤버포함

8 서브클래스에서슈퍼클래스멤버접근

자바상속의특징 9 클래스다중상속 (multiple inheritance) 불허 C++ 는다중상속가능 C++ 는다중상속으로멤버가중복생성되는문제있음 자바는인터페이스 (interface) 의다중상속허용 모든자바클래스는묵시적으로 Object 클래스상속받음 java.lang.object 는클래스는모든클래스의슈퍼클래스

슈퍼클래스의멤버에대한서브클래스의접근 10 슈퍼클래스의 private 멤버 서브클래스에서접근할수없음 슈퍼클래스의디폴트멤버 서브클래스가동일한패키지에있을때, 접근가능 슈퍼클래스의 public 멤버 서브클래스는항상접근가능 슈퍼클래스의 protected 멤버 같은패키지내의모든클래스접근허용패키지여부와상관없이서브클래스는접근가능

11 슈퍼클래스멤버의접근지정자

protected 멤버 12 protected 멤버에대한접근 같은패키지의모든클래스에게허용상속되는서브클래스 ( 같은패키지든다른패키지든상관없음 ) 에게허용

서브클래스 / 슈퍼클래스의생성자호출과실행 13 서브클래스의객체가생성될때 슈퍼클래스생성자와서브클래스생성자모두실행호출순서 서브클래스의생성자먼저호출, 서브클래스의생성자는실행전슈퍼클래스생성자호출실행순서 슈퍼클래스의생성자가먼저실행된후서브클래스의생성자실행

슈퍼클래스와서브클래스의생성자호출및실행관계 14 생성자 A 생성자 B 생성자 C

서브클래스와슈퍼클래스의생성자선택 15 슈퍼클래스와서브클래스 각각여러개의생성자작성가능 서브클래스의객체가생성될때 슈퍼클래스생성자 1 개와서브클래스생성자 1 개가실행 서브클래스의생성자와슈퍼클래스의생성자가결정되는방식 1. 개발자의명시적선택 서브클래스개발자가슈퍼클래스의생성자명시적선택 super() 키워드를이용하여선택 2. 컴파일러가기본생성자선택 서브클래스개발자가슈퍼클래스의생성자를선택하지않는경우 컴파일러가자동으로슈퍼클래스의기본생성자선택

컴파일러에의해슈퍼클래스의기본생성자가묵시적선택 (1) 16 개발자가서브클래스의생성자에대해슈퍼클래스의생성자를명시적으로선택하지않은경우 생성자 A 생성자 B

슈퍼클래스에기본생성자가없어오류난경우 17 오류메시지 "Implicit super constructor A() is undefined. Must explicitly invoke another constructor"

서브클래스의매개변수를가진생성자에대해서도슈퍼클래스의기본생성자가자동선택 18 개발자가서브클래스의생성자에대해슈퍼클래스의생성자를명시적으로선택하지않은경우 생성자 A 매개변수생성자 B

super() 로슈퍼클래스의생성자명시적선택 19 super() 서브클래스에서명시적으로슈퍼클래스의생성자선택호출 사용방식 super(parameter); 인자를이용하여슈퍼클래스의적당한생성자호출 반드시서브클래스생성자코드의제일첫라인에와야함

super() 로슈퍼클래스의생성자를명시적으로선택한사례 20 매개변수생성자 A5 매개변수생성자 B5

예제 5-2 : super() 를활용한 ColorPoint 작성 21 super() 를이용하여 ColorPoint 클래스의생성자에서서브클래스 Point 의생성자를호출하는예를보인다. x=5, y=6 class Point { private int x, y; // 한점을구성하는 x, y 좌표 Point() { this.x = this.y = 0; Point(int x, int y) { this.x = x; this.y = y; void showpoint() { // 점의좌표출력 System.out.println("(" + x + "," + y + ")"); class ColorPoint extends Point { private String color; // 점의색 ColorPoint(int x, int y, String color) { super(x, y); // Point 의생성자 Point(x, y) 호출 this.color = color; void showcolorpoint() { // 컬러점의좌표출력 System.out.print(color); showpoint(); // Point 클래스의 showpoint() 호출 public class SuperEx { public static void main(string[] args) { ColorPoint cp = new ColorPoint(5, 6, "blue"); cp.showcolorpoint(); blue(5,6) x=5, y=6, color = "blue" 전달

22 업캐스팅개념

업캐스팅 23 생물이들어가는박스에사람이나코끼리를넣어도무방 * 사람이나코끼리모두생물을상속받았기때문 업캐스팅 (upcasting) 서브클래스의레퍼런스를슈퍼클래스레퍼런스에대입슈퍼클래스레퍼런스로서브클래스객체를가리키게되는현상 class Person { class Student extends Person { Person p; Student s = new Student(); p = s; // 업캐스팅 슈퍼클래스레퍼런스로객체내의슈퍼클래스의멤버만접근가능 p.grade = "A"; // grade 는 Person 의 // 멤버가아니므로 // 컴파일오류

업캐스팅사례 class Person { String name; String id; public Person(String name) { this.name = name; class Student extends Person { String grade; String department; public Student(String name) { super(name); public class UpcastingEx { public static void main(string[] args) { Person p; Student s = new Student(" 이재문 "); p = s; // 업캐스팅발생 System.out.println(p.name); // 오류없음 24 p.grade = "A"; // 컴파일오류 p.department = "Com"; // 컴파일오류 이재문

다운캐스팅 25 다운캐스팅 (downcasting) 슈퍼클래스레퍼런스를서브클래스레퍼런스에대입 업캐스팅된것을다시원래대로되돌리는것 반드시명시적타입변환지정 class Person { class Student extends Person { Person p = new Student(" 이재문 "); // 업캐스팅 Student s = (Student)p; // 다운캐스팅, 강제타입변환

다운캐스팅사례 26 public class DowncastingEx { public static void main(string[] args) { Person p = new Student(" 이재문 "); // 업캐스팅 Student s; s = (Student)p; // 다운캐스팅 System.out.println(s.name); // 오류없음 s.grade = "A"; // 오류없음 이재문

업캐스팅레퍼런스로객체구별? 27 업캐스팅된레퍼런스로는객체의실제타입을구분하기어려움 슈퍼클래스는여러서브클래스에상속되기때문 예 ) 아래의클래스계층구조에서, p 가가리키는객체가 Person 객체인지, Student 객체인지, Professor 객체인지구분하기어려움 Person p = new Person(); Person p = new Student(); // 업캐스팅 Person p = new Professor(); // 업캐스팅 Person 타입의레퍼런스 p 로업캐스팅 Person 객체 샘플클래스계층구조 p? Student 객체 Professor 객체 p 가가리키는객체가 Person 객체인지, Student 객체인지, Professor 객체인지구분하기어려움

instanceof 연산자사용 28 instanceof 연산자 instanceof 연산자 레퍼런스가가리키는객체의타입식별 객체레퍼런스 instanceof 클래스타입 연산의결과 : true/false 의불린값 instanceof 연산자사용사례 Person p = new Professor(); if(p instanceof Person) if(p instanceof Student) if(p instanceof Researcher) if(p instanceof Professor) new Professor() 객체는 Professor 타입이면서, 동시에 Researcher 타입이기도하고, Person 타입이기도함 // true // false. Student를상속받지않기때문 // true // true if("java" instanceof String) // true if(3 instanceof int) // 문법오류. instanceof 는객체에대한레퍼런스에만사용

예제 5-3 : instanceof 연산자활용 29 instanceof 연산자를이용하여 [ 그림 5-15] 의상속관계에따라레퍼런스가가리키는객체의타입을알아본다. 실행결과는무엇인가? class Person { class Student extends Person { class Researcher extends Person { class Professor extends Researcher { public class InstanceOfEx { static void print(person p) { if(p instanceof Person) System.out.print("Person "); if(p instanceof Student) System.out.print("Student "); if(p instanceof Researcher) System.out.print("Researcher "); if(p instanceof Professor) System.out.print("Professor "); System.out.println(); public static void main(string[] args) { System.out.print("new Student() -> "); print(new Student()); System.out.print("new Researcher() -> "); print(new Researcher()); System.out.print("new Professor() -> "); print(new Professor()); new Student() -> Person Student new Researcher() -> Person Researcher new Professor() -> Person Researcher Professor new Professor() 객체는 Person 타입이기도하고 Researcher 타입이기도하고, Professor 타입이기도함

메소드오버라이딩의개념 30 메소드오버라이딩 (Method Overriding) 서브클래스에서슈퍼클래스의메소드중복작성슈퍼클래스의메소드무력화, 항상서브클래스에오버라이딩한메소드가실행되도록보장됨 메소드무시하기 로번역되기도함 오버라이딩조건 슈퍼클래스메소드의원형 ( 메소드이름, 인자타입및개수, 리턴타입 ) 동일하게작성

31 서브클래스객체와오버라이딩된메소드호출 - 오버라이딩한메소드가실행됨을보장 (a) 오버라이딩된메소드, B 의 f() 직접호출 class A { void f() { System.out.println("A 의 f() 호출 "); class B extends A { void f() { // 클래스 A 의 f() 를오버라이딩 System.out.println("B 의 f() 호출 "); (b) A 의 f() 를호출해도, 오버라이딩된메소드, B 의 f() 가실행됨

오버라이딩의목적, 다형성실현 32 오버라이딩으로다형성실현 하나의인터페이스 ( 같은이름 ) 에서로다른구현슈퍼클래스의메소드를서브클래스에서각각목적에맞게다르게구현사례 Shape의 draw() 메소드를 Line, Rect, Circle에서오버라이딩하여다르게구현

예제 5-4 : 메소드오버라이딩으로다형성실현 33 Shape 의 draw() 메소드를 Line, Circle, Rect 클래스에서목적에맞게오버라이딩하는다형성의사례를보여준다. class Shape { // 도형의슈퍼클래스 public void draw() { System.out.println("Shape"); class Line extends Shape { public void draw() { // 메소드오버라이딩 System.out.println("Line"); class Rect extends Shape { public void draw() { // 메소드오버라이딩 System.out.println("Rect"); class Circle extends Shape { public void draw() { // 메소드오버라이딩 System.out.println("Circle"); public class MethodOverridingEx { static void paint(shape p) { // Shape을상속받은객체들이동적바인딩 // 매개변수로넘어올수있음 p.draw(); // p가가리키는객체에오버라이딩된 draw() 호출. // 동적바인딩 public static void main(string[] args) { Line line = new Line(); paint(line); // Line 의 draw() 실행. "Line" 출력 Line Shape Line Rect Circle paint(new Shape()); // Shape 의 draw() 실행. "Shape" 출력 paint(new Line()); // 오버라이딩된메소드 Line 의 draw() 실행 paint(new Rect()); // 오버라이딩된메소드 Rect 의 draw() 실행 paint(new Circle()); // 오버라이딩된메소드 Circle 의 draw() 실행

예제 5-4 실행과정 34

동적바인딩 오버라이딩된메소드호출 35 * 오버라이딩메소드가항상호출된다. public class SuperObject { protected String name; public void paint() { draw(); public void draw() { System.out.println("Super Object"); public static void main(string [] args) { SuperObject a = new SuperObject(); a.paint(); Super Object class SuperObject { protected String name; public void paint() { draw(); 동적바인딩 public void draw() { System.out.println("Super Object"); public class SubObject extends SuperObject { public void draw() { System.out.println("Sub Object"); public static void main(string [] args) { SuperObject b = new SubObject(); b.paint(); Sub Object

super 키워드로슈퍼클래스의멤버접근 36 동적바인딩 class SuperObject { protected String name; public void paint() { draw(); 정적바인딩 public void draw() { System.out.println(name); public class SubObject extends SuperObject { protected String name; public void draw() { name = "Sub"; super.name = "Super"; super.draw(); System.out.println(name); public static void main(string [] args) { SuperObject b = new SubObject(); b.paint(); super 슈퍼클래스의멤버를접근할때사용되는레퍼런스 super. 슈퍼클래스의멤버 서브클래스에서만사용 슈퍼클래스의필드접근 슈퍼클래스의메소드호출시 super 로이루어지는메소드호출 : 정적바인딩 Super Sub

37 오버로딩과오버라이딩

추상클래스 38 추상메소드 (abstract method) abstract 로선언된메소드, 메소드의코드는없고원형만선언 public abstract String getname(); // 추상메소드 public abstract String fail() { return "Good Bye"; // 추상메소드아님. 컴파일오류 추상클래스 (abstract class) 추상메소드를가지며, abstract로선언된클래스추상메소드없이, abstract로선언한클래스 // 추상메소드를가진추상클래스 abstract class Shape { Shape() {... void edit() {... abstract public void draw(); // 추상메소드 // 추상메소드없는추상클래스 abstract class JComponent { String name; void load(string name ) { this.name= name; class fault { // 오류. 추상메소드를가지고있으므로 abstract 로선언되어야함 abstract void f(); // 추상메소드

추상클래스의인스턴스생성불가 39 추상클래스는온전한클래스가아니기때문에인스턴스를생성할수없음 JComponent p; p = new JComponent(); Shape obj = new Shape(); // 오류없음. 추상클래스의레퍼런스선언 // 컴파일오류. 추상클래스의인스턴스생성불가 // 컴파일오류. 추상클래스의인스턴스생성불가 컴파일오류메시지 Unresolved compilation problem: Cannot instantiate the type Shape

추상클래스의상속과구현 40 추상클래스상속 추상클래스를상속받으면추상클래스가됨 서브클래스도 abstract 로선언해야함 abstract class A { // 추상클래스 abstract int add(int x, int y); // 추상메소드 abstract class B extends A { // 추상클래스 void show() { System.out.println("B"); A a = new A(); // 컴파일오류. 추상클래스의인스턴스생성불가 B b = new B(); // 컴파일오류. 추상클래스의인스턴스생성불가 추상클래스구현 서브클래스에서슈퍼클래스의추상메소드구현 ( 오버라이딩 ) 추상클래스를구현한서브클래스는추상클래스아님 class C extends A { // 추상클래스구현. C 는정상클래스 int add(int x, int y) { return x+y; // 추상메소드구현. 오버라이딩 void show() { System.out.println("C");... C c = new C(); // 정상

추상클래스의목적 41 추상클래스의목적 상속을위한슈퍼클래스로활용하는것서브클래스에서추상메소드구현다형성실현 class Shape { public void draw() { System.out.println("Shape"); abstract class Shape { public abstract void draw(); 추상클래스로작성 추상클래스를상속받아추상메소드 draw() 구현 class Line extends DObject { public void draw() { System.out.println("Line"); class Rect extends DObject { public void draw() { System.out.println("Rect"); class Circle extends DObject { public void draw() { System.out.println("Circle");

예제 5-5 : 추상클래스의구현 42 추상클래스 Calculator 를상속받는 GoodCalc 클래스를구현하라. abstract class Calculator { public abstract int add(int a, int b); public abstract int subtract(int a, int b); public abstract double average(int[] a);

예제 5-5 정답 43 public class GoodCalc extends Calculator { public int add(int a, int b) { // 추상메소드구현 return a + b; public int subtract(int a, int b) { // 추상메소드구현 return a - b; public double average(int[] a) { // 추상메소드구현 double sum = 0; for (int i = 0; i < a.length; i++) sum += a[i]; return sum/a.length; public static void main(string [] args) { GoodCalc c = new GoodCalc(); System.out.println(c.add(2,3)); System.out.println(c.subtract(2,3)); System.out.println(c.average(new int [] { 2,3,4 )); 5-1 3.0

인터페이스의필요성 44 정해진규격 ( 인터페이스 ) 에맞기만하면연결가능. 각회사마다구현방법은다름 정해진규격 ( 인터페이스 ) 에맞지않으면연결불가

자바인터페이스 45 자바인터페이스 상수와추상메소드로만구성 : 변수필드없음 인터페이스선언 interface 키워드로선언 interface PhoneInterface { int BUTTONS = 20; // 상수필드선언 void sendcall(); // 추상메소드 void receivecall(); // 추상메소드 public interface 로서 public 생략가능 public static final 로서 public static final 생략가능 abstract public 으로서 abstract public 생략가능 자바인터페이스의특징 상수와추상메소드로만구성 메소드 : public abstract 타입으로생략가능 상수 : public static final 타입으로생략가능인터페이스의객체생성불가 new PhoneInterface(); // 오류. 인터페이스의객체를생성할수없다.

인터페이스상속 46 인터페이스간에상속가능 인터페이스를상속하여확장된인터페이스작성가능 extends 키워드로상속선언 예 ) interface MobilePhoneInterface extends PhoneInterface { void sendsms(); // 새로운추상메소드추가 void receivesms(); // 새로운추상메소드추가 인터페이스다중상속허용 예 ) interface MusicPhoneInterface extends PhoneInterface, MP3Interface {...

인터페이스구현 47 인터페이스구현 인터페이스를상속받아, 모든추상메소드를구현한클래스선언 implements 키워드로인터페이스구현 예 ) class FeaturePhone implements MobilePhoneInterface { // 인터페이스구현 public void sendcall() {... public void receivecall() {... MobilePhoneInterface의모든메소드구현 public void sendsms() {... public void receivesms() {... // 다른메소드추가가능 public int getbuttons() {... 여러개의인터페이스동시구현도가능 클래스상속과인터페이스구현을동시에할수있음 예제 5-6

예제 5-6 : 인터페이스구현과동시에슈퍼클래스상속 48 interface PhoneInterface { int BUTTONS = 20; void sendcall(); void receivecall(); interface MobilePhoneInterface extends PhoneInterface { void sendsms(); void receivesms(); interface MP3Interface { public void play(); public void stop(); class PDA { public int calculate(int x, int y) { return x + y; // SmartPhone 클래스는 PDA를상속받고, // MobilePhoneInterface와 MP3Interface 인터페이스에선언된 // 메소드를모두구현 class SmartPhone extends PDA implements MobilePhoneInterface, MP3Interface { public void sendcall() { System.out.println(" 전화걸기 "); public void receivecall() { System.out.println(" 전화받기 "); public void sendsms() { System.out.println("SMS 보내기 "); public void receivesms() { System.out.println("SMS 받기 "); public void play() { System.out.println(" 음악재생 "); public void stop() { System.out.println(" 재생중지 "); public void schedule() { System.out.println(" 일정관리 "); public class InterfaceEx { public static void main(string [] args) { SmartPhone p = new SmartPhone(); p.sendcall(); p.play(); System.out.println(p.calculate(3,5)); p.schedule(); MobilePhoneInterface 모든메소드구현 MP3Interface 의모든메소드구현 새로운메소드추가 전화걸기음악재생 8 일정관리