chapter03 복습순서 |
메모 | ||
ch04> Archer Hero Warrior Wizard MainTest1 ------------- Person Student Teacher |
ch05> Banana Peach Fruit ------------- MainTest1 MainTest2 MainTest3 ------------- DownCastingTest ch06> Animal AnimalTest Human Tiger |
ch07> Computer Desktop MyNoteBook NoteBook MainTest1 ------------- AlCar Car ManulCar MainTest2 |
궁사, 히어로, 전사, 마법사 클래스 설계
클래스 사용
package ch04;
public class MainTest1 {
// main function_start of code
public static void main(String[] args) {
Warrior warrior1 = new Warrior("전사", 100);
Archer archer1 = new Archer("궁수", 100);
Wizard wizard1 = new Wizard("마법사", 50);
String name = warrior1.name; // hero
int hp = warrior1.hp; // hero
warrior1.attack(); // hero
warrior1.comboAttack(); // warrior
}// end of main
}// end of class
상속 형태
과일(부모) ← 바나나, 복숭아(자식들) 클래스 설계
다형성 : 과일이면서도 복숭아 · 바나나이기도 한 것
예시 : 먹는 배, 바다에 띄우는 배, 신체 배
package ch05;
public class MainTest1 {
public static void main(String[] args) {
Banana banana = new Banana();
Peach peach = new Peach();
banana.showInfo();
System.out.println("--------------------");
peach.showInfo();
// 자바에서 다형성이란
// 부모 타입 인스턴스 변수에 자식 객체를 생성할 수 있다.
Fruit fruit = new Banana(); // 업 캐스팅 된 상태
// 바나나의 주소값이 과일에 담김
// 부모 자식 관계에서 사용 가능하다._상속구조일때만
// 그 역은 성립하지 않는다.
// 즉 자식 인스턴스 변수에(참조변수)
// 부모 인스턴스를 생성시킬 수 없다.
// Banana banana2 = new Fruit(); (x)
}
}
업캐스팅
package ch05;
import java.util.Scanner;
public class MainTest2 {
public static void main(String[] args) {
final int BANANA = 1;
final int PEACH = 2;
//스캐너
//사용자가 입력한 1,2 받으면 해당하는 객체에 정보를
//화면에 출력해 주세요
System.out.println("바나나 : 1, 복숭아 : 2");
Scanner sc = new Scanner(System.in);
int userInput = sc.nextInt();
Fruit fruit;
//만약 1번이라면 바나나 객체를 생성하고
//showInfo 메서드를 호출해 주세요.
//아니라면 복숭아 객체를 생성해서
//showInfo 메서드를 호출해 주세요.
if(userInput == BANANA) {
fruit = new Banana(); //업 캐스팅
}else {
fruit = new Peach();
}
fruit.showInfo(); //1,2
//사용자가 입력한 값에 따라서 인스턴스를 쉽게
//바꿔 줄 수 있다.
// Fruit fruit1 = new Banana();
// Fruit fruit2 = new Peach();
//
// if(userInput == 1 ) {
// fruit1.showInfo();
// }else {
// fruit2.showInfo();
// }
}
}
배열로 다형성을 써보자
package ch05;
public class MainTest3 {
public static void main(String[] args) {
// 다형성 : 배열 (자료구조) 관계에서도 사용 가능
// 하나의 변수에 연관된 데이터를 통으로 관리하기 위해 사용
// 1.
Banana banana1 = new Banana();
Banana banana2 = new Banana();
Banana[] bananaBuket = new Banana[2];
bananaBuket[0] = banana1;
bananaBuket[1] = banana2;
// 1분 foreach _showInfo 호출
for (Banana banana : bananaBuket) {
banana.showInfo();
}
//복숭아
Peach peach1 = new Peach();
Peach peach2 = new Peach();
//배열 사용해서 담아 주세요
//배열은 2칸
Peach[] peachBuket = new Peach[2];
peachBuket[0] = peach1;
peachBuket[1] = peach2;
//for 사용해서 showInfo 메서드 호출
// for (Peach peach : peachBuket) {
// peach.showInfo();
// }
//3. 다형성을 사용한다면
System.out.println("~~~~~~~~~~~~~~~~~~~~~");
Fruit[] fruitBuket = new Fruit[4];
fruitBuket[0] = banana1;
fruitBuket[1] = peach1;
fruitBuket[2] = banana2;
fruitBuket[3] = peach2;
for (Fruit fruit : fruitBuket) {
fruit.showInfo();
}
}
}
다운캐스팅
package ch05;
public class DownCastingTest {
public static void main(String[] args) {
//1.바나나에 origin 멤버 변수를 추가
Fruit fruit = new Banana(); // 업캐스팅
// ↓
// fruit.origin; // 다운캐스팅
//컴파일러는 부모 타입 인스턴스 변수타입을 바라보고 있는 상태
//다운 캐스팅을 사용한다면 가능
//(컴파일러에게 자식 객체 타입으로 바라보라고 명시)
String origin = ((Banana)fruit).origin;
System.out.println("원산지 : "+ origin);
//컴파일 타임 - 사람이 작성한 언어를 기계언어(0,1)로 변환하는 것
//런타임 - 프로그램을 실행했을 때
}//end
}//end
상속 오버라이드
package ch06;
public class AnimalTest {
public static void main(String[] args) {
Animal hAnimal = new Human();
Animal tAnimal = new Tiger();
hAnimal.move();
System.out.println("--------------------");
tAnimal.move();
}
}
컴퓨터 관련 클래스 설계 , 상속 , 추상클래스 객체 생성 X
package ch07;
public class MainTest1 {
public static void main(String[] args) {
// Computer computer = new Computer();
//추상클래스로는 객체를 생성할 수없다
Computer computer = new DeskTop();
computer.turnOn();
computer.display();
computer.turnOff();
System.out.println("------------------------");
NoteBook noteBook = new MyNoteBook();
noteBook.turnOn();
noteBook.display();
noteBook.turnOff();
}
}
추상메서드 만들기 abstract
추상메서드를 직접 구현한 일반 메서드 만들기
package ch07;
public class AICar extends Car {
//추상메서드 만들기 abstract
//추상메서드를 직접구현한 일반메서드 만들기
@Override
public void drive() {
System.out.println("자율 주행합니다.");
System.out.println("자동차가 스스로 방향을 바꿉니다.");
}
@Override
public void stop() {
System.out.println("스스로 멈춥니다.");
}
@Override
public void wiper() {
System.out.println("스스로 와이퍼를 동작합니다.");
}
@Override
public void washCar() {
System.out.println("스스로 세차를 합니다.");
}
// private void run() {
// // TODO Auto-generated method stub
//
// }
}
템플릿 메서드 패턴
package ch07;
public abstract class Car {
public void startCar() {
System.out.println("시동을 켭니다.");
}
public void turnOff() {
System.out.println("시동을 끕니다.");
}
public abstract void drive();
public abstract void stop();
public abstract void wiper();
//후크(hook)메서드 : 필요하면 가져다가 쓰는 것
public void washCar() {
}
//템플릿메서드 패턴
//핵심 !!
//하위 클래스에서 재정의 할 수 없게 해야 한다. --> final
final public void run() {
startCar();
drive();
wiper();
stop();
turnOff();
washCar();
}
}
package ch07;
public class ManualCar extends Car{
@Override
public void drive() {
System.out.println("사람이 운전을 합니다.");
System.out.println("사람이 핸들을 조작 합니다.");
}
@Override
public void stop() {
System.out.println("브레이크를 밟아서 정지합니다.");
}
@Override
public void wiper() {
System.out.println("사람이 와이퍼를 작동합니다.");
}
}
package ch07;
public class MainTest2 {
public static void main(String[] args) {
Car aiCar = new AICar();
aiCar.run();
System.out.println("------------------");
Car manualCar = new ManualCar();
manualCar.run();
//프레임워크란 실행의 흐름이
//정해져 있기 때문에 그 안에서 흐름을
}//end
}//end
수업내용
[출처] https://blog.naver.com/devnote1 작성자 devnote1
'코리아 IT아카데미 > Java' 카테고리의 다른 글
ddazua_Java | 4강 연산자2 (0) | 2021.11.01 |
---|---|
10일차 | interface, static, swing(FlowLaout)+array, arraylist, for문 변경 (0) | 2021.10.30 |
8일차 | 배열, 배열리스트, 상속, 오버라이드, 상속할수없는클래스 (0) | 2021.10.27 |
7일차 | Marine·Zealot·Zergling설계, 랜덤·캘린더 유틸 사용, 싱글톤 패턴 만들기 (0) | 2021.10.26 |
5일차 | 학생과 교통수단 클래스 설계, 마법사·전사 전투 과제 (0) | 2021.10.25 |