Java Seminar Chapter3.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
Class diagram. 클래스 클래스 이름 연산 속성 2 class Transportation { private int maximumPassenger; private double speed; public void depart(); public void stop();
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
Chapter 05. 클래스Ⅱ.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
16강. 자바 빈 빈 이란? 빈 만들기 빈 관련 액션 태그(useBean, getProperty, setProperty)
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
컴퓨터공학실습(I) 3주 인공지능연구실.
직렬화와 역직렬화에 대하여 직렬화 가능 클래스의 선언 방법
명품 JAVA Programming.
어서와 Java는 처음이지! 제7장 상속.
제 5 장 상속과 다형성.
명품 JAVA Essential.
C++ Espresso 제9장 다형성.
[INA470] Java Programming Youn-Hee Han
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
Java Seminar Chapter 4.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
명품 JAVA Essential.
Lesson 6. 형변환.
명품 Java Programming.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
어서와 Java는 처음이지! 제7장 상속.
레퍼런스 타입에 대하여 열거 타입의 선언과 이용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
자바 5.0 프로그래밍.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
자바응용.
Lesson 4. 수식과 연산자.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
명품 C++ 9장 가상 함수와 추상 클래스.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
프로그래머를 위한 첫걸음 JDBC Lecture 001 BY MINIO
내부 클래스와 내부 인터페이스에 대하여 내부 클래스의 선언 방법과 이용 방법 내부 인터페이스의 선언 방법과 이용 방법
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
JA A V W. 06.
10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자
[ 단원 06 ] 상속과 다형성.
12. 상속 : 고급.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
발표자 : 이지연 Programming Systems Lab.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
자바 객체 지향 프로그래밍 Ps lab 김윤경.
Presentation transcript:

Java Seminar Chapter3

Static

Static public class Circle { private int r; private float pi = 3.14f; public Circle(int r) { this.r = r; } public void setPi(float pi) { this.pi = pi; public float getArea() { return r * r * pi; public class Main { public static void main(String[] args) { Circle c1 = new Circle(5); Circle c2 = new Circle(7); System.out.println(c1.getArea()); System.out.println(c2.getArea()); c1.setPi(3); c2.setPi(3); }

Static public class Circle { private int r; private static float pi = 3.14f; public Circle(int r) { this.r = r; } public void setPi(float pi) { this.pi = pi; public static float getArea() { return r * r * pi; public class Main { public static void main(String[] args) { Circle c1 = new Circle(5); Circle c2 = new Circle(7); System.out.println(c1.getArea()); System.out.println(c2.getArea()); c1.setPi(3); }

Static public class Main { public static void main(String[] args) { Circle c1 = new Circle(5); Circle c2 = new Circle(7); System.out.println(c1.getArea()); System.out.println(c2.getArea()); Circle.setPi(3); }

Inheritance(상속) static규칙 1.static 지시자가 붙은 field나 method는 단 한가지만 존재한다. 2.static 지시자가 붙은 field나 method는 이클립스에서 이탤릭체로 표시된다. 3.static 지시자가 붙은 field나 method는 인스턴스를 생성하지 않고 호출가능 4.static 지시자가 붙은 method는 static field와 method만 사용가능. 5.static 지시자가 붙은 method는 instance field와 method는 사용 불가.

Inheritance(상속)

Inheritance(상속) package com.jiharu.core; public class Member { private String name; private String gender; private int age; public Member(String name, String gender, int age) { this.name = name; this.gender = gender; this.age = age; } public String getName() { return name; public void setName(String name) { public String getGender() { return gender; public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; public void setAge(int age) { this.age = age; public String toString() { return "Member [name=" + name + ", gender=" + gender + ", age=" + age + "]";

Inheritance(상속) 회원(Member)이 가진 속성(Field) 운영진(Admin)이 가진 속성(Field) 이름(name) 성별(gender) 나이(age) 운영진(Admin)이 가진 속성(Field) 이름(name) 성별(gender) 나이(age) 직책(rank)

Inheritance(상속) 이렇게 않 씀! package com.jiharu.core; public class Admin { private String name; private String gender; private int age; private String rank; public Admin(String name, String gender, int age) { this.name = name; this.gender = gender; this.age = age; this.rank = rank; } public String getName() { return name; public void setName(String name) { public String getGender() { return gender; public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; public void setAge(int age) { this.age = age; public int getRank() { return rank; public void setRank(int rank) { this.rank = rank; public String toString() { return ”Admin [name=" + name + ", gender=" + gender + ", age=" + age + ", rank=" + rank + "]"; 이렇게 않 씀!

Inheritance(상속)

Inheritance(상속)

Inheritance(상속)

Inheritance(상속)

Inheritance(상속)

Inheritance(상속)

Inheritance(상속) 상속 규칙 1.상속을 하면 상속 받는 클래스는 상속하는 클래스의 모든 필드, 메소드, 생성자가 상속된다. 2.기본적으로 모든 클래스는 Object클래스를 상속받는다. 3.private변수는 상속관계에서도 접근할 수 없다. 존재치 않는건 아니지만 접근이 불가능 4.자식 클래스는 부모 클래스의 생성자를 무조건적으로 호출해야만 한다. 용어 정리 Super Class – 상속을 해준 클래스를 super, parents클래스라고 부른다. Sub Class – 상속을 받은 클래스를 sub, derived, child클래스라고 부른다.

Inheritance(상속) package com.jiharu.core; public class Admin extends Member { private String rank; public Admin(String name, String gender, int age, String rank) { super(name, gender, age); this.rank = rank; } public String getRank() { return rank; public void setRank(String rank) {

Inheritance(상속) Admin클래스의 info메소드 부모 클래스에서 name과 age와 gender는 private이므로 접근이 불가능하다.

상속 관계에서 protected를 사용하면 접근가능 Inheritance(상속) 상속 관계에서 protected를 사용하면 접근가능

Inheritance(상속) package com.jiharu.main; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import com.jiharu.core.Admin; import com.jiharu.core.Member; public class Main { public static void main(String[] args) { JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); Admin admin = new Admin("김태정", "남자", 27, "교수"); Member mem = new Member("피카츄", "중성", 100); pn.setLayout(new BorderLayout()); fr.setContentPane(pn); JLabel lbl1 = new JLabel(admin.toString()); JLabel lbl2 = new JLabel(mem.toString()); pn.add(lbl1, BorderLayout.NORTH); pn.add(lbl2, BorderLayout.SOUTH); fr.setSize(600, 400); fr.setVisible(true); }

Inheritance(상속) Admin 클래스가Member의 toString 메소드를 그대로 사용하게 된다.

Inheritance(상속) super와 오버라이딩(Overwrriding) public String toString() { return "Admin [name=" + super.name + ", gender=" + this.gender + ", age=" + age + ", rank=" + rank +"]"; } super – 부모클래스의 메소드나 필드를 접근할 때 사용. this와 마찬가지로 super()는 생성자를 의미한다. 오버라이딩 – 상속관계에서 메소드를 재정의 할때 사용. 해당 메소드를 덮게 된다.

Inheritance(상속) super와 오버라이딩(Overwrriding) Main을 수정하지 않고도 변경된 것을 확인 가능

Inheritance(상속) 타입캐스팅 package com.jiharu.main; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import com.jiharu.core.Admin; import com.jiharu.core.Member; public class Main { public static void main(String[] args) { JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); Member admin = new Admin("김태정", "남자", 27, "교수"); Member mem = new Member("피카츄", "중성", 100); pn.setLayout(new BorderLayout()); fr.setContentPane(pn); JLabel lbl1 = new JLabel(admin.toString()); JLabel lbl2 = new JLabel(mem.toString()); pn.add(lbl1, BorderLayout.NORTH); pn.add(lbl2, BorderLayout.SOUTH); fr.setSize(600, 400); fr.setVisible(true); }

Inheritance(상속) 타입캐스팅 Admin이 Member를 상속받을 경우(Member가 Admin의 super클래스) Member admin = new Admin("김태정", "남자", 27, "교수");-① Admin mem = (Admin)new Member("피카츄", "중성", 100);-② 자바의 경우 왼쪽 변수와 오른쪽 변수의 타입은 항상 동등해야한다. ①번과 같이 super=sub관계를 up캐스팅이라고 한다. 이 캐스팅은 명시적으로 캐스팅하지 않아도 된다.(캐스팅 연산자 생략 가능) ②번과 같이 sub=super관계를 down캐스팅이라고 한다. 이 캐스팅의 경우에는 반드시 명시적으로 캐스팅 해야한다.

Inheritance(상속) 타입캐스팅 Admin 상속시 Admin은 Member를 모두 가진다. Member 그러나 역은 성립하지 않는다. 따라서 down캐스팅시 문제가 발생한다. name gender age Member rank

Inheritance(상속) 이 코드가 문제없이 실행되지 않는다. 타입캐스팅 package com.jiharu.main; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import com.jiharu.core.Admin; import com.jiharu.core.Member; public class Main { public static void main(String[] args) { JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); Admin admin = new Admin("김태정", "남자", 27, "교수"); Admin mem = (Admin) new Member("피카츄", "중성", 100); pn.setLayout(new BorderLayout()); fr.setContentPane(pn); JLabel lbl1 = new JLabel(admin.toString()); JLabel lbl2 = new JLabel(mem.toString()); pn.add(lbl1, BorderLayout.NORTH); pn.add(lbl2, BorderLayout.SOUTH); fr.setSize(600, 400); fr.setVisible(true); }

Inheritance(상속) 원래의 정체가 Admin이어야한다. 타입캐스팅 package com.jiharu.main; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import com.jiharu.core.Admin; import com.jiharu.core.Member; public class Main { public static void main(String[] args) { JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); Admin admin = new Admin("김태정", "남자", 27, "교수"); Member mem0 = new Admin("피카츄", "중성", 100, "동물"); Admin mem = mem0; pn.setLayout(new BorderLayout()); fr.setContentPane(pn); JLabel lbl1 = new JLabel(admin.toString()); JLabel lbl2 = new JLabel(mem.toString()); pn.add(lbl1, BorderLayout.NORTH); pn.add(lbl2, BorderLayout.SOUTH); fr.setSize(600, 400); fr.setVisible(true); }

Inheritance(상속) Abstract public int getY() { return y; } public void setY(int y) { this.y = y; public int getWidth() { return width; public void setWidth(int width) { this.width = width; public int getHeight() { return height; public void setHeight(int height) { this.height = height; public float getArea() { return 0; }; Abstract package com.jiharu.shape; public class Shape { private int x; private int y; private int width; private int height; public Shape(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } public int getX() { return x; public void setX(int x) {

Shape에서 getArea는 계륵 같은 존재 Inheritance(상속) Abstract package com.jiharu.shape; public class Circle extends Shape { public Circle(int x, int y, int width, int height) { super(x, y, width, height); } public float getArea() { return getWidth() / 2 * getHeight() / 2 * 3.14f; public class Rectangle extends Shape { public Rectangle(int x, int y, int width, int height) { return getWidth() * getHeight(); Shape에서 getArea는 계륵 같은 존재

Inheritance(상속) Abstract abstract 클래스 public int getY() { return y; } public void setY(int y) { this.y = y; public int getWidth() { return width; public void setWidth(int width) { this.width = width; public int getHeight() { return height; public void setHeight(int height) { this.height = height; abstract public float getArea() ; Abstract package com.jiharu.shape; abstract public class Shape { private int x; private int y; private int width; private int height; public Shape(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } public int getX() { return x; public void setX(int x) { abstract 클래스

Inheritance(상속) Abstract abstract규칙 1.abstract 메소드는 본체를 가질 수없다. 2.하나라도 abstract 메소드가 존재한다면 자동으로 abstract class가 된다. 3.abstact클래스는 반드시 상속해서 사용한다. 4.상속받은 abstact클래스의 abstact메소드를 반드시 오버라이딩해준다.

그럼 모든 method가 abstract다! Inheritance(상속) Interface 그럼 모든 method가 abstract다! = 실체가 없다? interface

Inheritance(상속) Interface

Inheritance(상속) Interface

Inheritance(상속) Interface package com.jiharu.person; public interface Person { public final static int foot = 2; public static int hand = 2; public int mouth = 1; int eye = 2; public abstract void run(); public void sleep(); void eat(); static void breath() { System.out.println("헉,헉, 살기 위해 숨쉼!"); } default void eatChicken() { System.out.println("치킨 맛있엉!"); field는 자동으로 public final static이 되며 method 는 public abstract가 된다.

Inheritance(상속) Interface default 메소드는 interface에서만 존재. package com.jiharu.person; public interface Person { public final static int foot = 2; public static int hand = 2; public int mouth = 1; int eye = 2; public abstract void run(); public void sleep(); void eat(); static void breath() { System.out.println("헉,헉, 살기 위해 숨쉼!"); } default void eatChicken() { System.out.println("치킨 맛있엉!"); default 메소드는 interface에서만 존재. static 메소드는 반드시 본체를 기술해야함.

Inheritance(상속) Interface를 상속받기

Inheritance(상속) Interface를 상속받기

Inheritance(상속) Interface를 상속받기 @Override는 상속받았음을 뜻함. 없어도 무관. //TODO는 자동완성으로 만들어 졌음을 알림. 없어도 무관.

Inheritance(상속) Interface interface규칙 1.메소드는 static과 default를 제외하고 abstract만 가질 수 있으며 실전에서는 static과 default를 가지는 일은 극히 드물다. 그러므로 abstract만 가진다고 생각해도 당장은 무관하다. 2.필드는 무조건 final이므로 상수이다. 즉 변수를 가질 수 없다. 3.무조건 상속해서 사용한다.

Nested Class

Nested Class 소스 파일내에 public outter 클래스는 단 한 개만 존재가능 //Outter.java public class Outter { public class Inner { } public void method() { class Local{ class Source { 클래스 내의 클래스를 inner 클래스라 한다 inner class는 접근 제한자 지정 가능 메소드 내의 클래스를 local 클래스라 한다 접근 제한자 지정이 불가능 소스 파일내에 package outter 클래스는 여러 개 선언 가능

Nested Class 메소드내에서만 사용가능 근데 안씀-- package 내에서만 사용가능 //Outter.java public class Main { public static void main(String[] args) { Outter o = new Outter(); Outter.Inner i = o.new Inner(); } //Outter.java public class Outter { public class Inner { } public void method() { class Local{ class Source { 메소드내에서만 사용가능 근데 안씀-- package 내에서만 사용가능

익명 클래스(Anonymus Class) Nested Class package com.jiharu.person; public class Main { public static void main(String[] args) { Person kimtaejung = new Person() { @Override public void sleep() { System.out.println("푹 잘잠"); } public void run() { System.out.println("두칸씩 뜀"); public void eat() { System.out.println("고기만 먹음"); }; kimtaejung.run(); kimtaejung.eatChicken(); Person.breath(); 익명 클래스(Anonymus Class) package com.jiharu.person; public interface Person { public final static int foot = 2; public static int hand = 2; public int mouth = 1; int eye = 2; public abstract void run(); public void sleep(); void eat(); static void breath() { System.out.println("헉,헉, 살기 위해 숨쉼!"); } default void eatChicken() { System.out.println("치킨 맛있엉!");

Nested Class 익명클래스란? 1.익명 클래스란 생성자 뒤에 바로 {}붙혀서 만드는 클래스를 의미. 2.단 한번밖에 사용못함, 재활용 불가 3.익명클래스는 상속+중첩클래스로 취급 4.익명클래스인 이유는 바이너리를 보면 이름이 없이 숫자만 적혀있다. 그래서 익명클래스라 부름

Nested Class instanceof 연산자 package com.jiharu.person; public class Main { public static void main(String[] args) { Person kimtaejung = new Person() { @Override public void sleep() { System.out.println("푹 잘잠"); } public void run() { System.out.println("두칸씩 뜀"); public void eat() { System.out.println("고기만 먹음"); }; kimtaejung.run(); kimtaejung.eatChicken(); Person.breath(); System.out.println(kimtaejung instanceof Person); System.out.println(kimtaejung instanceof Object); instanceof 연산자 1.이 연산자는 상속관계인지 아닌지 확인할 수 있다. 상속관계에 있다면 true를 반환 2.사용 방식은 (변수)instanceof(클래스) 형식으로 사용