본문 바로가기
java&eclipse 코딩 알고리즘/20231215

PolymorphismTest2

by 몽상크리에이터 2023. 12. 15.

package com.tjoeun.abstractClass;

 

import java.util.ArrayList;

 

abstract class Animal {

public abstract void move();

public void eating() { }

}

// Human 클래스는 Animal 클래스를 상속받아 만든다.

class Human extends Animal {

@Override

public void move() {

System.out.println("사람이 두 발로 걷습니다");

}

public void readBook() {

System.out.println("사람이 책을 읽습니다.");

}

}

// Tiger 클래스는 Animal 클래스를 상속받아 만든다.

class Tiger extends Animal {

@Override

public void move() {

System.out.println("호랑이는 네 발로 걷습니다.");

}

public void hunting() {

System.out.println("호랑이가 사냥을 합니다.");

}

}

// Eagle 클래스는 Animal 클래스를 상속받아 만든다.

class Eagle extends Animal {

@Override

public void move() {

System.out.println("독수리가 하늘을 날아갑니다.");

}

public void flying() {

System.out.println("독수리가 날개를 쫘~~~~~악 펴고 멀리 날아갑니다.");

}

}

 

public class PolymorphismTest2 {

public static void main(String[] args) {

 

// 1. PolymorphismTest 클래스에서는 이렇게 실행했었다.

Animal[] animals = {new Human(), new Tiger(), new Eagle()};

animals[0].move();

animals[1].move();

animals[2].move();

System.out.println("===========================");

 

// 2. UpCasting, 자식 => 부모 moveAnimal() 메소드 사용

Animal hAnimal = new Human();

Animal tAnimal = new Tiger();

Animal eAnimal = new Eagle();

// main() 메소드는 static으로 선언된 메소드이기 때문에 static으로 선언된 메소드에만

// 접근할 수 있으므로 moveAnimal() 메소드는 반드시 static으로 선언해야 한다.

// main() 메소드는 static으로 선언된 메소드라서 객체 생성 없이 바로 실행가능

moveAnimal(hAnimal);

moveAnimal(tAnimal);

moveAnimal(eAnimal);

System.out.println("===========================");

 

// 3. 현재 클래스 자신의 객체를 생성해서 메소드를 실행하면 static으로 선언하지 않아도 실행 가능하다.

// => moveAnimal2() 메소드 사용

PolymorphismTest2 polymorphismTest2 = new PolymorphismTest2(); // 자신의 클래스 객체를 만든다.

polymorphismTest2.moveAnimal2(hAnimal);

polymorphismTest2.moveAnimal2(tAnimal);

polymorphismTest2.moveAnimal2(eAnimal);

System.out.println("===========================");

 

// 4. ArrayList 이용

ArrayList<Animal> animalList = new ArrayList<Animal>();

animalList.add(hAnimal);

animalList.add(tAnimal);

animalList.add(eAnimal);

 

for (Animal animal : animalList) {

animal.move();

}

System.out.println("===========================");

 

// 5. 다운캐스팅 활용

for (int i = 0; i < animalList.size(); i++) {

Animal animal = animalList.get(i);

// 다운캐스팅 : 업캐스팅 된 클래스를 다시 원래의 타입의 형변환 시킨다.

// instanceof로 형변환 가능 여부를 확인해서 실행한다

if (animal instanceof Human) {

Human human = (Human) animal; // 부모에 저장된 자식 객체 => 자식

human.readBook();

} else if (animal instanceof Tiger) {

Tiger tiger = (Tiger) animal;

tiger.hunting();

} else if (animal instanceof Eagle) {

Eagle eagle = (Eagle) animal;

eagle.flying();

} else {

System.out.println("DownCasting 불가능");

}

}

}

 

private static void moveAnimal(Animal animal) {

animal.move();

}

private static void moveAnimal2(Animal animal) {

animal.move();

}

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'java&eclipse 코딩 알고리즘 > 20231215' 카테고리의 다른 글

TemplateMethodTest  (0) 2023.12.15
AbstractClassTest  (0) 2023.12.15
PolymorphismTest  (0) 2023.12.15
UpDownCastingTest  (0) 2023.12.15
CustomerTest  (0) 2023.12.15