From 59201967b064f0fc0f0be68e19a8822a58702837 Mon Sep 17 00:00:00 2001 From: arinming Date: Wed, 14 Feb 2024 15:05:57 +0900 Subject: [PATCH] [Week3][Chap10~13] Kimarin (#32) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Week1][Chap1] 프로젝트 환경 구성 (#4) * [Week1][Chap1] 클래스가 필요한 이유 (#4) * [Week1][Chap1] 클래스 도입 (#4) * [Week1][Chap1] 배열 도입 - 시작 (#4) * [Week1][Chap1] 배열 도입 - 리펙토링 (#4) * [Week1][Chap1] 문제와 풀이 (#4) * [Week1][Chap2] 기본형 vs 참조형2 - 변수 대입 (#4) * [Week1][Chap2] 기본형 vs 참조형3 - 메서드 호출 (#4) * [Week1][Chap2] 참조형과 메서드 호출 - 활용 (#4) * [Week1][Chap2] 변수와 초기화 (#4) * [Week1][Chap2] null (#4) * [Week1][Chap2] NullPointerException (#4) * [Week1][Chap2] 문제와 풀이 (#4) * [Week1][Chap3] 절차 지향 프로그래밍1 - 시작 (#4) * [Week1][Chap3] 절차 지향 프로그래밍2 - 데이터 묶음 (#4) * [Week1][Chap3] 절차 지향 프로그래밍3 - 메서드 추출 (#4) * [Week1][Chap3] 클래스와 메서드 (#4) * [Week1][Chap3] 객체 지향 프로그래밍 (#4) * [Week1][Chap3] 문제와 풀이 (#4) * [Week1][Chap4] 생성자 - 필요한 이유 (#4) * [Week1][Chap4] this (#4) * [Week1][Chap4] 생성자 - 도입 (#4) * [Week1][Chap4] 기본 생성자 (#4) * [Week1][Chap4] 오버로딩과 this() (#4) * [Week1][Chap4] 문제와 풀이 (#4) * [Week1][Chap5] 패키지 - 시작 (#4) * [Week1][Chap5] 패키지 - import (#4) * [Week1][Chap5] 패키지 활용 (#4) * [Week2][Chap6] 접근 제어자 이해1 (#15) * [Week2][Chap6] 접근 제어자 이해2 (#15) * [Week2][Chap6] 접근 제어자 사용 - 필드, 메서드 (#15) * [Week2][Chap6] 접근 제어자 사용 - 클래스 레벨 (#15) * [Week2][Chap6] 캡슐화 (#15) * [Week2][Chap6] 문제와 풀이 (#15) * [Week2][Chap7] 스택 영역 (#15) * [Week2][Chap7] 스택 영역과 힙 영역 (#15) * [Week2][Chap7] static 변수1 (#15) * [Week2][Chap7] static 변수2 (#15) * [Week2][Chap7] static 변수3 (#15) * [Week2][Chap7] static 메서드1 (#15) * [Week2][Chap7] static 메서드2 (#15) * [Week2][Chap7] static 메서드3 (#15) * [Week2][Chap7] 문제와 풀이 (#15) * [Week2][Chap8] final 변수와 상수1 (#15) * [Week2][Chap8] final 변수와 상수2 (#15) * [Week2][Chap8] final 변수와 참조 (#15) * [Week2][Chap8] 정리 (#15) * [Week2][Chap9] 상속 - 시작 (#15) * [Week2][Chap9] 상속 - 시작 (#15) * [Week2][Chap9] 상속 관계 (#15) * [Week2][Chap9] 상속과 기능 추가 (#15) * [Week2][Chap9] 상속과 메서드 오버라이딩 (#15) * [Week2][Chap9] 상속과 접근 제어 (#15) * [Week2][Chap9] super - 부모 참조 (#15) * [Week2][Chap9] super - 생성자 (#15) * [Week2][Chap9] 문제와 풀이 (#15) * [Week3][Chap10] 다형성 시작 (#27) * [Week3][Chap10] 다형성과 캐스팅 (#27) * [Week3][Chap10] 캐스팅의 종류 (#27) * [Week3][Chap10] 다운캐스팅과 주의점 (#27) * [Week3][Chap10] 다운캐스팅과 주의점 (#27) * [Week3][Chap10] instanceof (#27) * [Week3][Chap10] 다형성과 메서드 오버라이딩 (#27) * [Week3][Chap11] 다형성 활용1 (#27) * [Week3][Chap11] 다형성 활용2 (#27) * [Week3][Chap11] 다형성 활용3 (#27) * [Week3][Chap11] 추상 클래스2 (#27) * [Week3][Chap11] 추상 클래스2 (#27) * [Week3][Chap11] 인터페이스 (#27) * [Week3][Chap11] 인터페이스 - 다중 구현 (#27) * [Week3][Chap11] 클래스와 인터페이스 활용 (#27) * [Week3][Chap12] 다형성 - 역할과 구현 예제1 (#27) * [Week3][Chap12] 다형성 - 역할과 구현 예제2 (#27) * [Week3][Chap12] 다형성 - 역할과 구현 예제3 (#27) * [Week3][Chap12] OCP(Open-Closed Principle) 원칙 (#27) * [Week3][Chap12] 문제와 풀이 (#27) --- .../inspectionProfiles/Project_Default.xml" | 10 ++++++ .../src/poly/basic/CastingMain1.java" | 15 +++++++++ .../src/poly/basic/CastingMain2.java" | 19 +++++++++++ .../src/poly/basic/CastingMain3.java" | 13 ++++++++ .../src/poly/basic/CastingMain4.java" | 15 +++++++++ .../src/poly/basic/CastingMain5.java" | 26 +++++++++++++++ .../src/poly/basic/CastingMain6.java" | 26 +++++++++++++++ .../java-basic/src/poly/basic/Child.java" | 7 ++++ .../java-basic/src/poly/basic/Parent.java" | 7 ++++ .../java-basic/src/poly/basic/PolyMain.java" | 29 ++++++++++++++++ .../java-basic/src/poly/car0/CarMain0.java" | 17 ++++++++++ .../java-basic/src/poly/car0/Driver.java" | 29 ++++++++++++++++ .../java-basic/src/poly/car0/K3Car.java" | 14 ++++++++ .../java-basic/src/poly/car0/Model3Car.java" | 14 ++++++++ .../java-basic/src/poly/car1/Car.java" | 9 +++++ .../java-basic/src/poly/car1/CarMain1.java" | 22 +++++++++++++ .../java-basic/src/poly/car1/Driver.java" | 17 ++++++++++ .../java-basic/src/poly/car1/K3Car.java" | 18 ++++++++++ .../java-basic/src/poly/car1/Model3Car.java" | 18 ++++++++++ .../java-basic/src/poly/car1/NewCar.java" | 18 ++++++++++ .../java-basic/src/poly/diamond/Child.java" | 18 ++++++++++ .../src/poly/diamond/DiamondMian.java" | 16 +++++++++ .../src/poly/diamond/InterfaceA.java" | 7 ++++ .../src/poly/diamond/InterfaceB.java" | 7 ++++ .../src/poly/ex/pay0/KakaoPay.java" | 10 ++++++ .../src/poly/ex/pay0/NaverPay.java" | 10 ++++++ .../src/poly/ex/pay0/PayMain0.java" | 19 +++++++++++ .../src/poly/ex/pay0/PayService.java" | 22 +++++++++++++ .../src/poly/ex/pay1/DefaultPay.java" | 9 +++++ .../src/poly/ex/pay1/KakaoPay.java" | 11 +++++++ .../src/poly/ex/pay1/NaverPay.java" | 11 +++++++ .../java-basic/src/poly/ex/pay1/NewPay.java" | 10 ++++++ .../java-basic/src/poly/ex/pay1/Pay.java" | 5 +++ .../src/poly/ex/pay1/PayMain1.java" | 24 ++++++++++++++ .../src/poly/ex/pay1/PayMain2.java" | 26 +++++++++++++++ .../src/poly/ex/pay1/PayService.java" | 20 +++++++++++ .../src/poly/ex/pay1/PayStore.java" | 17 ++++++++++ .../src/poly/ex/sender/EmailSender.java" | 9 +++++ .../src/poly/ex/sender/FaceBookSender.java" | 9 +++++ .../src/poly/ex/sender/SendMain.java" | 10 ++++++ .../src/poly/ex/sender/Sender.java" | 5 +++ .../src/poly/ex/sender/SmsSender.java" | 9 +++++ .../src/poly/ex1/AnimalSoundMain.java" | 25 ++++++++++++++ .../java-basic/src/poly/ex1/Cat.java" | 7 ++++ .../java-basic/src/poly/ex1/Caw.java" | 7 ++++ .../java-basic/src/poly/ex1/Dog.java" | 7 ++++ .../java-basic/src/poly/ex2/Animal.java" | 7 ++++ .../src/poly/ex2/AnimalPolyMain1.java" | 21 ++++++++++++ .../java-basic/src/poly/ex2/Cat.java" | 8 +++++ .../java-basic/src/poly/ex2/Caw.java" | 8 +++++ .../java-basic/src/poly/ex2/Dog.java" | 8 +++++ .../java-basic/src/poly/ex2/Duck.java" | 8 +++++ .../java-basic/src/poly/ex2/Pig.java" | 5 +++ .../src/poly/ex3/AbstractAnimal.java" | 10 ++++++ .../src/poly/ex3/AbstractMain.java" | 28 ++++++++++++++++ .../java-basic/src/poly/ex3/Cat.java" | 8 +++++ .../java-basic/src/poly/ex3/Caw.java" | 8 +++++ .../java-basic/src/poly/ex3/Dog.java" | 8 +++++ .../java-basic/src/poly/ex3/Duck.java" | 8 +++++ .../src/poly/ex4/AbstractAnimal.java" | 8 +++++ .../src/poly/ex4/AbstractMain.java" | 33 +++++++++++++++++++ .../java-basic/src/poly/ex4/Cat.java" | 13 ++++++++ .../java-basic/src/poly/ex4/Caw.java" | 13 ++++++++ .../java-basic/src/poly/ex4/Dog.java" | 13 ++++++++ .../java-basic/src/poly/ex5/Cat.java" | 13 ++++++++ .../java-basic/src/poly/ex5/Caw.java" | 13 ++++++++ .../java-basic/src/poly/ex5/Dog.java" | 15 +++++++++ .../src/poly/ex5/InterfaceAnimal.java" | 6 ++++ .../src/poly/ex5/InterfaceMain.java" | 30 +++++++++++++++++ .../src/poly/ex6/AbstractAnimal.java" | 9 +++++ .../java-basic/src/poly/ex6/Bird.java" | 13 ++++++++ .../java-basic/src/poly/ex6/Chicken.java" | 13 ++++++++ .../java-basic/src/poly/ex6/Dog.java" | 8 +++++ .../java-basic/src/poly/ex6/Fly.java" | 5 +++ .../src/poly/ex6/SoundFlyMain.java" | 29 ++++++++++++++++ .../src/poly/overriding/Child.java" | 10 ++++++ .../src/poly/overriding/OverridingMain.java" | 24 ++++++++++++++ .../src/poly/overriding/Parent.java" | 9 +++++ 78 files changed, 1085 insertions(+) create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/.idea/inspectionProfiles/Project_Default.xml" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain1.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain2.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain3.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain4.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain5.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain6.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/Child.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/Parent.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/PolyMain.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/CarMain0.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/Driver.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/K3Car.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/Model3Car.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Car.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/CarMain1.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Driver.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/K3Car.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Model3Car.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/NewCar.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/Child.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/DiamondMian.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/InterfaceA.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/InterfaceB.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/KakaoPay.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/NaverPay.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/PayMain0.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/PayService.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/DefaultPay.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/KakaoPay.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/NaverPay.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/NewPay.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/Pay.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayMain1.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayMain2.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayService.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayStore.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/EmailSender.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/FaceBookSender.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/SendMain.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/Sender.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/SmsSender.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/AnimalSoundMain.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Cat.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Caw.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Dog.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Animal.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/AnimalPolyMain1.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Cat.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Caw.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Dog.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Duck.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Pig.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/AbstractAnimal.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/AbstractMain.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Cat.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Caw.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Dog.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Duck.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/AbstractAnimal.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/AbstractMain.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Cat.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Caw.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Dog.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Cat.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Caw.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Dog.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/InterfaceAnimal.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/InterfaceMain.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/AbstractAnimal.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Bird.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Chicken.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Dog.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Fly.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/SoundFlyMain.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/Child.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/OverridingMain.java" create mode 100644 "\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/Parent.java" diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/.idea/inspectionProfiles/Project_Default.xml" "b/\352\271\200\354\225\204\353\246\260/java-basic/.idea/inspectionProfiles/Project_Default.xml" new file mode 100644 index 0000000..5993e43 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/.idea/inspectionProfiles/Project_Default.xml" @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain1.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain1.java" new file mode 100644 index 0000000..ac6ce63 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain1.java" @@ -0,0 +1,15 @@ +package poly.basic; + +public class CastingMain1 { + public static void main(String[] args) { + // 부모 변수가 자식 인스턴스 참조(다형적 참조) + Parent poly = new Child(); + + // 단, 자식의 기능은 호출 불가, 컴파일 오류 발생 + // poly.childMethod(); + + // 다운 캐스팅(부모 타입 -> 자식 타입) + Child child = (Child) poly; // x001 + child.childMethod(); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain2.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain2.java" new file mode 100644 index 0000000..b09c1f7 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain2.java" @@ -0,0 +1,19 @@ +package poly.basic; + +public class CastingMain2 { + public static void main(String[] args) { + // 부모 변수가 자식 인스턴스 참조(다형적 참조) + Parent poly = new Child(); + + // 단, 자식의 기능은 호출 불가, 컴파일 오류 발생 + // poly.childMethod(); + + // 다운 캐스팅(부모 타입 -> 자식 타입) + Child child = (Child) poly; // x001 + child.childMethod(); + + // 일시적 다운 캐스팅 - 해당 메서드를 호출하는 순간만 다운 캐스팅 + ((Child) poly).childMethod(); + + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain3.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain3.java" new file mode 100644 index 0000000..99d9348 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain3.java" @@ -0,0 +1,13 @@ +package poly.basic; + +// upcasting vs downcasting +public class CastingMain3 { + public static void main(String[] args) { + Child child = new Child(); + Parent parent1 = (Parent) child; // 업캐스팅은 생략 가능, 생략 권장 + Parent parent2 = child; // 업캐스팅 생략 + + parent1.parentMethod(); + parent2.parentMethod(); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain4.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain4.java" new file mode 100644 index 0000000..b67b0d8 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain4.java" @@ -0,0 +1,15 @@ +package poly.basic; + +// 다운 캐스팅을 자동으로 하지 않는 이유 +public class CastingMain4 { + public static void main(String[] args) { + Parent parent1 = new Child(); + Child child1 = (Child) parent1; + child1.childMethod(); // 문제 없음 + + Parent parent2 = new Parent(); + + Child child2 = (Child) parent2; // 런타임 오류 - ClassCastException + child2.childMethod(); // 실행 불가 + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain5.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain5.java" new file mode 100644 index 0000000..d8c0d31 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain5.java" @@ -0,0 +1,26 @@ +package poly.basic; + +public class CastingMain5 { + public static void main(String[] args) { + Parent parent1 = new Parent(); + System.out.println("parent1 호출"); + call(parent1); + + Parent parent2 = new Child(); + System.out.println("parent2 호출"); + call(parent2); + } + + private static void call(Parent parent) { + parent.parentMethod(); + + if (parent instanceof Child) { + // Child c = new Parent(); + System.out.println("Child 인스턴스 맞음"); + Child child = (Child) parent; + child.childMethod(); + } else { + System.out.println("Child 인스턴스 아님"); + } + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain6.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain6.java" new file mode 100644 index 0000000..f8cc23c --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/CastingMain6.java" @@ -0,0 +1,26 @@ +package poly.basic; + +public class CastingMain6 { + public static void main(String[] args) { + Parent parent1 = new Parent(); + System.out.println("parent1 호출"); + call(parent1); + + Parent parent2 = new Child(); + System.out.println("parent2 호출"); + call(parent2); + } + + private static void call(Parent parent) { + parent.parentMethod(); + + // Child 인스턴스인 경우 childMethod() 실행 + if (parent instanceof Child child) { + // Child c = new Parent(); + System.out.println("Child 인스턴스 맞음"); + child.childMethod(); + } else { + System.out.println("Child 인스턴스 아님"); + } + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/Child.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/Child.java" new file mode 100644 index 0000000..cb0f055 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/Child.java" @@ -0,0 +1,7 @@ +package poly.basic; + +public class Child extends Parent { + public void childMethod() { + System.out.println("Child.childMethod"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/Parent.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/Parent.java" new file mode 100644 index 0000000..12fc6f5 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/Parent.java" @@ -0,0 +1,7 @@ +package poly.basic; + +public class Parent { + public void parentMethod() { + System.out.println("Parent.parentMethod"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/PolyMain.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/PolyMain.java" new file mode 100644 index 0000000..4163b14 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/basic/PolyMain.java" @@ -0,0 +1,29 @@ +package poly.basic; + +public class PolyMain { + public static void main(String[] args) { + // 부모 변수가 부모 인스턴스 참조 + System.out.println("Parent -> Parent"); + Parent parent = new Parent(); + parent.parentMethod(); + + // 자식 변수가 자식 인스턴스 참조 + System.out.println("Child -> Child"); + Child child = new Child(); + child.parentMethod(); + child.childMethod(); + + // 부모 변수가 자식 인스턴스 참조 (다형적 참조) + System.out.println("Parent -> Child"); + Parent poly = new Child(); + // 부모 타입은 자식을 참조할 수 있다 + poly.parentMethod(); + + // 자식은 부모를 담을 수 없다 +// Child child1 = new Parent(); + // 자식의 기능은 호출할 수 없다 -> 컴파일 오류 발생 +// poly.childMethod(); + + + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/CarMain0.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/CarMain0.java" new file mode 100644 index 0000000..7c5fd53 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/CarMain0.java" @@ -0,0 +1,17 @@ +package poly.car0; + +public class CarMain0 { + public static void main(String[] args) { + Driver driver = new Driver(); + K3Car k3Car = new K3Car(); + + driver.setK3Car(k3Car); + driver.drive(); + + // 추가 + Model3Car model3Car = new Model3Car(); + driver.setK3Car(null); + driver.setModel3Car(model3Car); + driver.drive(); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/Driver.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/Driver.java" new file mode 100644 index 0000000..ffc5cc0 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/Driver.java" @@ -0,0 +1,29 @@ +package poly.car0; + +public class Driver { + + private K3Car k3Car; + private Model3Car model3Car; // 추가 + + public void setK3Car(K3Car k3Car) { + this.k3Car = k3Car; + } + + // 추가 + public void setModel3Car(Model3Car model3Car) { + this.model3Car = model3Car; + } + + public void drive() { + System.out.println("자동차를 운전합니다."); + if (k3Car != null) { + k3Car.startEngine(); + k3Car.pressAccelerator(); + k3Car.offEngine(); + } else if (model3Car != null) { + model3Car.startEngine(); + model3Car.pressAccelerator(); + model3Car.offEngine(); + } + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/K3Car.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/K3Car.java" new file mode 100644 index 0000000..f2cc85a --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/K3Car.java" @@ -0,0 +1,14 @@ +package poly.car0; + +public class K3Car { + public void startEngine() { + System.out.println("K3Car.startEngine"); + } + public void offEngine() { + System.out.println("K3Car.offEngine"); + } + + public void pressAccelerator() { + System.out.println("K3Car.pressAccelerator"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/Model3Car.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/Model3Car.java" new file mode 100644 index 0000000..e1826b6 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car0/Model3Car.java" @@ -0,0 +1,14 @@ +package poly.car0; + +public class Model3Car { + public void startEngine() { + System.out.println("Model3Car.startEngine"); + } + public void offEngine() { + System.out.println("Model3Car.offEngine"); + } + + public void pressAccelerator() { + System.out.println("Model3Car.pressAccelerator"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Car.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Car.java" new file mode 100644 index 0000000..e8481c5 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Car.java" @@ -0,0 +1,9 @@ +package poly.car1; + +public interface Car { + void startEngine(); + + void offEngine(); + + void pressAccelerator(); +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/CarMain1.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/CarMain1.java" new file mode 100644 index 0000000..6585db5 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/CarMain1.java" @@ -0,0 +1,22 @@ +package poly.car1; + +public class CarMain1 { + public static void main(String[] args) { + Driver driver = new Driver(); + + // 차량 선택(k3) + K3Car k3Car = new K3Car(); + driver.setCar(k3Car); + driver.drive(); + + // 차량 변경(k3 -> model3) + Model3Car model3Car = new Model3Car(); + driver.setCar(model3Car); + driver.drive(); + + // 차량 변경(model3 -> newCar) + NewCar newCar = new NewCar(); + driver.setCar(newCar); + driver.drive(); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Driver.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Driver.java" new file mode 100644 index 0000000..9395dbb --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Driver.java" @@ -0,0 +1,17 @@ +package poly.car1; + +public class Driver { + private Car car; + + public void setCar(Car car) { + System.out.println("자동차를 설정합니다: " + car); + this.car = car; + } + + public void drive() { + System.out.println("자동차를 운전합니다."); + car.startEngine(); + car.pressAccelerator(); + car.offEngine(); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/K3Car.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/K3Car.java" new file mode 100644 index 0000000..602749f --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/K3Car.java" @@ -0,0 +1,18 @@ +package poly.car1; + +public class K3Car implements Car { + @Override + public void startEngine() { + System.out.println("K3Car.startEngine"); + } + + @Override + public void offEngine() { + System.out.println("K3Car.offEngine"); + } + + @Override + public void pressAccelerator() { + System.out.println("K3Car.pressAccelerator"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Model3Car.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Model3Car.java" new file mode 100644 index 0000000..05c6150 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/Model3Car.java" @@ -0,0 +1,18 @@ +package poly.car1; + +public class Model3Car implements Car { + @Override + public void startEngine() { + System.out.println("Model3Car.startEngine"); + } + + @Override + public void offEngine() { + System.out.println("Model3Car.offEngine"); + } + + @Override + public void pressAccelerator() { + System.out.println("Model3Car.pressAccelerator"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/NewCar.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/NewCar.java" new file mode 100644 index 0000000..0e59ca8 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/car1/NewCar.java" @@ -0,0 +1,18 @@ +package poly.car1; + +public class NewCar implements Car{ + @Override + public void startEngine() { + System.out.println("NewCar.startEngine"); + } + + @Override + public void offEngine() { + System.out.println("NewCar.offEngine"); + } + + @Override + public void pressAccelerator() { + System.out.println("NewCar.pressAccelerator"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/Child.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/Child.java" new file mode 100644 index 0000000..39cba86 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/Child.java" @@ -0,0 +1,18 @@ +package poly.diamond; + +public class Child implements InterfaceA, InterfaceB{ + @Override + public void methodA() { + System.out.println("Child.methodA"); + } + + @Override + public void methodB() { + System.out.println("Child.methodB"); + } + + @Override + public void methodCommon() { + System.out.println("Child.methodCommon"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/DiamondMian.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/DiamondMian.java" new file mode 100644 index 0000000..0c544e4 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/DiamondMian.java" @@ -0,0 +1,16 @@ +package poly.diamond; + +public class DiamondMian { + public static void main(String[] args) { + InterfaceA a = new Child(); + a.methodA(); + a.methodCommon(); + + InterfaceB b = new Child(); + b.methodB(); + b.methodCommon(); + + Child child = new Child(); + child.methodCommon(); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/InterfaceA.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/InterfaceA.java" new file mode 100644 index 0000000..1e3354b --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/InterfaceA.java" @@ -0,0 +1,7 @@ +package poly.diamond; + +public interface InterfaceA { + void methodA(); + + void methodCommon(); +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/InterfaceB.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/InterfaceB.java" new file mode 100644 index 0000000..529ac02 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/diamond/InterfaceB.java" @@ -0,0 +1,7 @@ +package poly.diamond; + +public interface InterfaceB { + void methodB(); + + void methodCommon(); +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/KakaoPay.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/KakaoPay.java" new file mode 100644 index 0000000..cfd3912 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/KakaoPay.java" @@ -0,0 +1,10 @@ +package poly.ex.pay0; + +public class KakaoPay { + + public boolean pay(int amount) { + System.out.println("카카오페이 시스템과 연결합니다."); + System.out.println(amount + "원 결제를 시도합니다."); + return true; + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/NaverPay.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/NaverPay.java" new file mode 100644 index 0000000..c577b7b --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/NaverPay.java" @@ -0,0 +1,10 @@ +package poly.ex.pay0; + +public class NaverPay { + + public boolean pay(int amount) { + System.out.println("네이버페이 시스템과 연결합니다."); + System.out.println(amount + "원 결제를 시도합니다."); + return true; + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/PayMain0.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/PayMain0.java" new file mode 100644 index 0000000..4effdd8 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/PayMain0.java" @@ -0,0 +1,19 @@ +package poly.ex.pay0; + +public class PayMain0 { + public static void main(String[] args) { + PayService payService = new PayService(); + + String payOption1 = "kakao"; + int amount1 = 5000; + payService.processPay(payOption1, amount1); + + String payOption2 = "naver"; + int amount2 = 10000; + payService.processPay(payOption2, amount2); + + String payOption3 = "bad"; + int amount3 = 15000; + payService.processPay(payOption3, amount3); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/PayService.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/PayService.java" new file mode 100644 index 0000000..a497bf6 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay0/PayService.java" @@ -0,0 +1,22 @@ +package poly.ex.pay0; + +public class PayService { + public void processPay(String option, int amount) { + boolean result; + System.out.println("결제를 시작합니다: option=" + option + ", amount=" + amount); + if (option.equals("kakao")) { + KakaoPay kakaoPay = new KakaoPay(); + result = kakaoPay.pay(amount); + } else if (option.equals("naver")) { + NaverPay naverPay = new NaverPay(); + result = naverPay.pay(amount); + } else { + System.out.println("결제 수단이 없습니다."); result = false; + } + if (result) { + System.out.println("결제가 성공했습니다."); + } else { + System.out.println("결제가 실패했습니다."); + } + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/DefaultPay.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/DefaultPay.java" new file mode 100644 index 0000000..cf8769b --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/DefaultPay.java" @@ -0,0 +1,9 @@ +package poly.ex.pay1; + +public class DefaultPay implements Pay{ + @Override + public boolean pay(int amount) { + System.out.println("결제 수단이 없습니다."); + return false; + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/KakaoPay.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/KakaoPay.java" new file mode 100644 index 0000000..f8e7924 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/KakaoPay.java" @@ -0,0 +1,11 @@ +package poly.ex.pay1; + +public class KakaoPay implements Pay { + + @Override + public boolean pay(int amount) { + System.out.println("카카오페이 시스템과 연결합니다."); + System.out.println(amount + "원 결제를 시도합니다."); + return true; + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/NaverPay.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/NaverPay.java" new file mode 100644 index 0000000..b689169 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/NaverPay.java" @@ -0,0 +1,11 @@ +package poly.ex.pay1; + +public class NaverPay implements Pay { + + @Override + public boolean pay(int amount) { + System.out.println("네이버페이 시스템과 연결합니다."); + System.out.println(amount + "원 결제를 시도합니다."); + return true; + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/NewPay.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/NewPay.java" new file mode 100644 index 0000000..2dacc55 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/NewPay.java" @@ -0,0 +1,10 @@ +package poly.ex.pay1; + +public class NewPay implements Pay { + @Override + public boolean pay(int amount) { + System.out.println("NewPay 시스템과 연결합니다."); + System.out.println(amount + "원 결제를 시도합니다."); + return true; + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/Pay.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/Pay.java" new file mode 100644 index 0000000..19153fc --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/Pay.java" @@ -0,0 +1,5 @@ +package poly.ex.pay1; + +public interface Pay { + boolean pay(int amount); +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayMain1.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayMain1.java" new file mode 100644 index 0000000..570f626 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayMain1.java" @@ -0,0 +1,24 @@ +package poly.ex.pay1; + +public class PayMain1 { + public static void main(String[] args) { + PayService payService = new PayService(); + + String payOption1 = "kakao"; + int amount1 = 5000; + payService.processPay(payOption1, amount1); + + String payOption2 = "naver"; + int amount2 = 10000; + payService.processPay(payOption2, amount2); + + String payOption3 = "bad"; + int amount3 = 15000; + payService.processPay(payOption3, amount3); + + String payOption4 = "new"; + int amount4 = 10000; + payService.processPay(payOption4, amount4); + + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayMain2.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayMain2.java" new file mode 100644 index 0000000..86f66bd --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayMain2.java" @@ -0,0 +1,26 @@ +package poly.ex.pay1; + +import java.util.Scanner; + +public class PayMain2 { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + PayService payService = new PayService(); + + while (true) { + System.out.println("결제 수단을 입력하세요."); + String payOption = scanner.nextLine(); + + if (payOption.equals("exit")) { + System.out.println("프로그램을 종료합니다."); + return; + } + + System.out.println("결제 금액을 입력하세요"); + int amount = scanner.nextInt(); + scanner.nextLine(); + + payService.processPay(payOption, amount); + } + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayService.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayService.java" new file mode 100644 index 0000000..2cbd288 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayService.java" @@ -0,0 +1,20 @@ +package poly.ex.pay1; + +public class PayService { + + // 변하지 않는 부분 + public void processPay(String option, int amount) { + + System.out.println("결제를 시작합니다: option=" + option + ", amount=" + amount); + + Pay pay = PayStore.findPay(option); + boolean result = pay.pay(amount); + + + if (result) { + System.out.println("결제가 성공했습니다."); + } else { + System.out.println("결제가 실패했습니다."); + } + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayStore.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayStore.java" new file mode 100644 index 0000000..df78ad4 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/pay1/PayStore.java" @@ -0,0 +1,17 @@ +package poly.ex.pay1; + +public abstract class PayStore { + + // 변하는 부 + public static Pay findPay(String option) { + if (option.equals("kakao")) { + return new KakaoPay(); + } else if (option.equals("naver")) { + return new NaverPay(); + } else if(option.equals("new")) { + return new NewPay(); + } else { + return new DefaultPay(); + } + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/EmailSender.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/EmailSender.java" new file mode 100644 index 0000000..52d05ee --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/EmailSender.java" @@ -0,0 +1,9 @@ +package poly.ex.sender; + +public class EmailSender implements Sender{ + + @Override + public void sendMessage(String message) { + System.out.println("메일을 발송합니다 : " + message); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/FaceBookSender.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/FaceBookSender.java" new file mode 100644 index 0000000..512b76a --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/FaceBookSender.java" @@ -0,0 +1,9 @@ +package poly.ex.sender; + +public class FaceBookSender implements Sender{ + + @Override + public void sendMessage(String message) { + System.out.println("페이스북에 발송합니다 : " + message); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/SendMain.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/SendMain.java" new file mode 100644 index 0000000..4551a97 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/SendMain.java" @@ -0,0 +1,10 @@ +package poly.ex.sender; + +public class SendMain { + public static void main(String[] args) { + Sender[] senders = {new EmailSender(), new SmsSender(), new FaceBookSender()}; + for (Sender sender : senders) { + sender.sendMessage("환영합니다!"); + } + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/Sender.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/Sender.java" new file mode 100644 index 0000000..25a21c5 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/Sender.java" @@ -0,0 +1,5 @@ +package poly.ex.sender; + +public interface Sender { + void sendMessage(String message); +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/SmsSender.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/SmsSender.java" new file mode 100644 index 0000000..cc204ae --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex/sender/SmsSender.java" @@ -0,0 +1,9 @@ +package poly.ex.sender; + +public class SmsSender implements Sender{ + + @Override + public void sendMessage(String message) { + System.out.println("SMS를 발송합니다 : " + message); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/AnimalSoundMain.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/AnimalSoundMain.java" new file mode 100644 index 0000000..c3181b1 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/AnimalSoundMain.java" @@ -0,0 +1,25 @@ +package poly.ex1; + +public class AnimalSoundMain { + public static void main(String[] args) { + Dog dog = new Dog(); + Cat cat = new Cat(); + Caw caw = new Caw(); + + System.out.println("동물 소리 테스트 시작"); + dog.sound(); + System.out.println("동물 소리 테스트 종료"); + + System.out.println("동물 소리 테스트 시작"); + cat.sound(); + System.out.println("동물 소리 테스트 종료"); + + soundCaw(caw); + } + + private static void soundCaw(Caw caw) { + System.out.println("동물 소리 테스트 시작"); + caw.sound(); + System.out.println("동물 소리 테스트 종료"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Cat.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Cat.java" new file mode 100644 index 0000000..c49159c --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Cat.java" @@ -0,0 +1,7 @@ +package poly.ex1; + +public class Cat { + public void sound() { + System.out.println("냐옹"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Caw.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Caw.java" new file mode 100644 index 0000000..39449c9 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Caw.java" @@ -0,0 +1,7 @@ +package poly.ex1; + +public class Caw { + public void sound() { + System.out.println("음메"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Dog.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Dog.java" new file mode 100644 index 0000000..1aa233e --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex1/Dog.java" @@ -0,0 +1,7 @@ +package poly.ex1; + +public class Dog { + public void sound() { + System.out.println("멍멍"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Animal.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Animal.java" new file mode 100644 index 0000000..0cda7bb --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Animal.java" @@ -0,0 +1,7 @@ +package poly.ex2; + +public class Animal { + public void sound() { + System.out.println("동물 울음 소리"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/AnimalPolyMain1.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/AnimalPolyMain1.java" new file mode 100644 index 0000000..ae1a353 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/AnimalPolyMain1.java" @@ -0,0 +1,21 @@ +package poly.ex2; + +public class AnimalPolyMain1 { + public static void main(String[] args) { + Animal a = new Animal(); + a.sound(); + + Animal[] animalArr = {new Dog(), new Cat(), new Caw(), new Pig()}; + + for (Animal animal: animalArr) { + soundAnimal(animal); + } + } + + // 변하지 않는 부분 + private static void soundAnimal(Animal animal) { + System.out.println("동물 소리 테스트 시작"); + animal.sound(); + System.out.println("동물 소리 테스트 종료"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Cat.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Cat.java" new file mode 100644 index 0000000..20b30a2 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Cat.java" @@ -0,0 +1,8 @@ +package poly.ex2; + +public class Cat extends Animal { + @Override + public void sound() { + System.out.println("냐옹"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Caw.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Caw.java" new file mode 100644 index 0000000..9e230e5 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Caw.java" @@ -0,0 +1,8 @@ +package poly.ex2; + +public class Caw extends Animal { + @Override + public void sound() { + System.out.println("음메"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Dog.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Dog.java" new file mode 100644 index 0000000..c0e4d8e --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Dog.java" @@ -0,0 +1,8 @@ +package poly.ex2; + +public class Dog extends Animal { + @Override + public void sound() { + System.out.println("멍멍"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Duck.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Duck.java" new file mode 100644 index 0000000..7108676 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Duck.java" @@ -0,0 +1,8 @@ +package poly.ex2; + +public class Duck extends Animal { + @Override + public void sound() { + System.out.println("꽉꽉"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Pig.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Pig.java" new file mode 100644 index 0000000..95b2bad --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex2/Pig.java" @@ -0,0 +1,5 @@ +package poly.ex2; + +public class Pig extends Animal { + // Todo sound 해야하는데.. +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/AbstractAnimal.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/AbstractAnimal.java" new file mode 100644 index 0000000..bfaa559 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/AbstractAnimal.java" @@ -0,0 +1,10 @@ +package poly.ex3; + +public abstract class AbstractAnimal { + + public abstract void sound(); + + public void move() { + System.out.println("동물이 움직입니다."); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/AbstractMain.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/AbstractMain.java" new file mode 100644 index 0000000..d0b2e1b --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/AbstractMain.java" @@ -0,0 +1,28 @@ +package poly.ex3; + +public class AbstractMain { + public static void main(String[] args) { +// 추상클래스 생성 불가 +// AbstractAnimal animal = new AbstractAnimal(); + + Dog dog = new Dog(); + Cat cat = new Cat(); + Caw caw = new Caw(); + Duck duck = new Duck(); + + cat.sound(); + cat.move(); + + soundAnimal(dog); + soundAnimal(cat); + soundAnimal(caw); + soundAnimal(duck); + } + + // 변하지 않는 부분 + private static void soundAnimal(AbstractAnimal animal) { + System.out.println("동물 소리 테스트 시작"); + animal.sound(); + System.out.println("동물 소리 테스트 종료"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Cat.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Cat.java" new file mode 100644 index 0000000..f14d518 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Cat.java" @@ -0,0 +1,8 @@ +package poly.ex3; + +public class Cat extends AbstractAnimal{ + @Override + public void sound() { + System.out.println("냐옹"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Caw.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Caw.java" new file mode 100644 index 0000000..840ad60 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Caw.java" @@ -0,0 +1,8 @@ +package poly.ex3; + +public class Caw extends AbstractAnimal{ + @Override + public void sound() { + System.out.println("음메"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Dog.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Dog.java" new file mode 100644 index 0000000..c1e968e --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Dog.java" @@ -0,0 +1,8 @@ +package poly.ex3; + +public class Dog extends AbstractAnimal { + @Override + public void sound() { + System.out.println("멍멍"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Duck.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Duck.java" new file mode 100644 index 0000000..f6f252e --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex3/Duck.java" @@ -0,0 +1,8 @@ +package poly.ex3; + +public class Duck extends AbstractAnimal { + @Override + public void sound() { + System.out.println("꽉꽉"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/AbstractAnimal.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/AbstractAnimal.java" new file mode 100644 index 0000000..56cb20f --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/AbstractAnimal.java" @@ -0,0 +1,8 @@ +package poly.ex4; + +public abstract class AbstractAnimal { + + // 순수 추상 클래스 + public abstract void sound(); + public abstract void move(); +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/AbstractMain.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/AbstractMain.java" new file mode 100644 index 0000000..fbab6cd --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/AbstractMain.java" @@ -0,0 +1,33 @@ +package poly.ex4; +public class AbstractMain { + public static void main(String[] args) { +// 추상클래스 생성 불가 +// AbstractAnimal animal = new AbstractAnimal(); + + Dog dog = new Dog(); + Cat cat = new Cat(); + Caw caw = new Caw(); + + soundAnimal(dog); + soundAnimal(cat); + soundAnimal(caw); + + moveAnimal(dog); + moveAnimal(cat); + moveAnimal(caw); + } + + // 변하지 않는 부분 + private static void soundAnimal(AbstractAnimal animal) { + System.out.println("동물 소리 테스트 시작"); + animal.sound(); + System.out.println("동물 소리 테스트 종료"); + } + + // 변하지 않는 부분 + private static void moveAnimal(AbstractAnimal animal) { + System.out.println("동물 이동 테스트 시작"); + animal.move(); + System.out.println("동물 이동 테스트 종료"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Cat.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Cat.java" new file mode 100644 index 0000000..f7a5ca1 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Cat.java" @@ -0,0 +1,13 @@ +package poly.ex4; + +public class Cat extends AbstractAnimal { + @Override + public void sound() { + System.out.println("냐옹"); + } + + @Override + public void move() { + System.out.println("고양이 이동"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Caw.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Caw.java" new file mode 100644 index 0000000..f8b441b --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Caw.java" @@ -0,0 +1,13 @@ +package poly.ex4; + +public class Caw extends AbstractAnimal { + @Override + public void sound() { + System.out.println("음메"); + } + + @Override + public void move() { + System.out.println("소 이동"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Dog.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Dog.java" new file mode 100644 index 0000000..4125495 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex4/Dog.java" @@ -0,0 +1,13 @@ +package poly.ex4; + +public class Dog extends AbstractAnimal { + @Override + public void sound() { + System.out.println("멍멍"); + } + + @Override + public void move() { + System.out.println("개 이동"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Cat.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Cat.java" new file mode 100644 index 0000000..8af40dc --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Cat.java" @@ -0,0 +1,13 @@ +package poly.ex5; + +public class Cat implements InterfaceAnimal{ + @Override + public void sound() { + System.out.println("냐옹"); + } + + @Override + public void move() { + System.out.println("고양이 이동"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Caw.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Caw.java" new file mode 100644 index 0000000..a681979 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Caw.java" @@ -0,0 +1,13 @@ +package poly.ex5; + +public class Caw implements InterfaceAnimal{ + @Override + public void sound() { + System.out.println("음메"); + } + + @Override + public void move() { + System.out.println("소 이동"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Dog.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Dog.java" new file mode 100644 index 0000000..86747f2 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/Dog.java" @@ -0,0 +1,15 @@ +package poly.ex5; + +public class Dog implements InterfaceAnimal { + // implements == 구현 + // 내가 다 구현해야 하는 기능! + @Override + public void sound() { + System.out.println("멍멍"); + } + + @Override + public void move() { + System.out.println("개 이동"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/InterfaceAnimal.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/InterfaceAnimal.java" new file mode 100644 index 0000000..f602f17 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/InterfaceAnimal.java" @@ -0,0 +1,6 @@ +package poly.ex5; + +public interface InterfaceAnimal { + void sound(); // public abstract 생략 + void move(); // public abstract 생략 +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/InterfaceMain.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/InterfaceMain.java" new file mode 100644 index 0000000..0d04842 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex5/InterfaceMain.java" @@ -0,0 +1,30 @@ +package poly.ex5; + +public class InterfaceMain { + public static void main(String[] args) { +// 인터페이스 생성 불가 +// InterfaceAnimal interfaceAnimal = new InterfaceAnimal(); + + Cat cat = new Cat(); + Dog dog = new Dog(); + Caw caw = new Caw(); + + soundAnimal(cat); + soundAnimal(dog); + soundAnimal(caw); + } + + // 변하지 않는 부분 + private static void soundAnimal(InterfaceAnimal animal) { + System.out.println("동물 소리 테스트 시작"); + animal.sound(); + System.out.println("동물 소리 테스트 종료"); + } + + // 변하지 않는 부분 + private static void moveAnimal(InterfaceAnimal animal) { + System.out.println("동물 이동 테스트 시작"); + animal.move(); + System.out.println("동물 이동 테스트 종료"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/AbstractAnimal.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/AbstractAnimal.java" new file mode 100644 index 0000000..cfa09cc --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/AbstractAnimal.java" @@ -0,0 +1,9 @@ +package poly.ex6; + +public abstract class AbstractAnimal { + public abstract void sound(); + + public void move() { + System.out.println("동물이 이동합니다."); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Bird.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Bird.java" new file mode 100644 index 0000000..3594c43 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Bird.java" @@ -0,0 +1,13 @@ +package poly.ex6; + +public class Bird extends AbstractAnimal implements Fly{ + @Override + public void sound() { + System.out.println("짹짹"); + } + + @Override + public void fly() { + System.out.println("새 날기"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Chicken.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Chicken.java" new file mode 100644 index 0000000..29a7632 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Chicken.java" @@ -0,0 +1,13 @@ +package poly.ex6; + +public class Chicken extends AbstractAnimal implements Fly { + @Override + public void sound() { + System.out.println("꼬끼오"); + } + + @Override + public void fly() { + System.out.println("닭 날기"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Dog.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Dog.java" new file mode 100644 index 0000000..a37eb82 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Dog.java" @@ -0,0 +1,8 @@ +package poly.ex6; + +public class Dog extends AbstractAnimal { + @Override + public void sound() { + System.out.println("멍멍"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Fly.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Fly.java" new file mode 100644 index 0000000..087a36e --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/Fly.java" @@ -0,0 +1,5 @@ +package poly.ex6; + +public interface Fly { + void fly(); +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/SoundFlyMain.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/SoundFlyMain.java" new file mode 100644 index 0000000..5428069 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/ex6/SoundFlyMain.java" @@ -0,0 +1,29 @@ +package poly.ex6; + +public class SoundFlyMain { + public static void main(String[] args) { + Dog dog = new Dog(); + Bird bird = new Bird(); + Chicken chicken = new Chicken(); + + soundAnimal(dog); + soundAnimal(bird); + soundAnimal(chicken); + + flyAnimal(bird); + flyAnimal(chicken); + } + + // AbstractAnimal 사용 가능 + private static void soundAnimal(AbstractAnimal animal) { + System.out.println("동물 소리 테스트 시작"); + animal.sound(); + System.out.println("동물 소리 테스트 종료"); + } + + // Fly 인터페이스가 있으면 사용 가능 + public static void flyAnimal(Fly fly) { + System.out.println("날기 테스트 시작"); + fly.fly(); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/Child.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/Child.java" new file mode 100644 index 0000000..e257897 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/Child.java" @@ -0,0 +1,10 @@ +package poly.overriding; + +public class Child extends Parent { + public String value = "child"; + + @Override + public void method() { + System.out.println("Child.method"); + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/OverridingMain.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/OverridingMain.java" new file mode 100644 index 0000000..bd5dce9 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/OverridingMain.java" @@ -0,0 +1,24 @@ +package poly.overriding; + +public class OverridingMain { + public static void main(String[] args) { + // 자식 변수가 자식 인스턴스 참조 + Child child = new Child(); + System.out.println("Child -> Child"); + System.out.println("value = " + child.value); + child.method(); + + // 부모 변수가 부모 인스턴스 참조 + Parent parent = new Parent(); + System.out.println("Parent -> Parent"); + System.out.println("value = " + parent.value); + parent.method(); + + // 부모 변수가 자식 인스턴스 참조 (다형적 참조) + Parent poly = new Child(); + System.out.println("Parent -> Child"); + System.out.println("value = " + poly.value); // 변수는 오버라이딩 X + poly.method(); // 메서드는 오버라이딩 + // 오버라이딩 된 메서드는 항상 우선권을 가진딩 + } +} diff --git "a/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/Parent.java" "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/Parent.java" new file mode 100644 index 0000000..82ac175 --- /dev/null +++ "b/\352\271\200\354\225\204\353\246\260/java-basic/src/poly/overriding/Parent.java" @@ -0,0 +1,9 @@ +package poly.overriding; + +public class Parent { + public String value = "parent"; + + public void method() { + System.out.println("Parent.method"); + } +}