Java - 다형성 Polymorphism
2023. 1. 30. 16:27ㆍ코딩일기/JAVA
GitHub - jake5113/Mrhi_JAVA
Contribute to jake5113/Mrhi_JAVA development by creating an account on GitHub.
github.com
Abstract class : 추상 클래스
Abstract method : 추상 메소드
Abstract class 에 Abstract method(say()) 가 있다면
Abstract class(Animal) 을 상속받은
class(Cat, Dog, Pig) 들은 반드시!
Abstract method(say())를
오버라이드 하여 구현해야 한다.
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
// 예) 앱에 동물캐릭터 3종류(Dog, Cat, Pig)
Dog d = new Dog();
Cat c = new Cat();
Pig p = new Pig();
d.say();
c.say();
p.say();
System.out.println();
// 만약 이런 동물캐릭터가 여러마리면?
// Dog 5마리, Cat 10마리, Pig 4마리
// 하나씩 참조변수를 만드는 것은 미친것 같음
// 그래서 배운 배열!!
Dog[] dogs = new Dog[5];
dogs[0] = new Dog();
dogs[1] = new Dog();
dogs[2] = new Dog();
dogs[0].say();
dogs[1].say();
dogs[2].say();
System.out.println();
// 이런식으로 배열로 만들면 캐릭터 종류별로만 묶을 수 있어서
// 제어할 때 은근 짜증남.
// 그래서 동물캐릭터객체 모두를 제어할 수 있는
// 참조변수만 있다면, 이를 하나의 배열로 묶을 수 있다.
// Dog, Cat, Pig 의 부모클래스가 있다면,
// 그 부모클래스 참조변수로 여러 종류의 자식객체들 모두를
// 참조할 수 있으니 하나의 배열로 묶을 수 있겠다.
// Dog, Cat, Pig 의 부모클래스로 Animal 이라는 클래스 설계
Animal ani = new Dog(); // 부모참조변수로 자식객체 참조가능 [업캐스팅]
ani.say(); // override 된 say가 발동
Animal ani2 = new Cat();
ani2.say();
Animal ani3 = new Pig();
ani2.say();
// Animal 참조변수로 Dog, Cat, Pig 모두를 참조할 수 있으니
// Animal 참조변수를 여러개 가지는 배열을 만들면,
// 여러 종류의 객체들을 모두 참조할 수 있다!!
Animal[] anis = new Animal[5]; // Animal 참조변수 5개 짜리 배열 객체
System.out.println(anis[0]);
System.out.println();
anis[0] = new Dog(); // up casting
anis[1] = new Cat(); // up casting
anis[2] = new Pig(); // up casting
anis[3] = new Dog(); // up casting
anis[4] = new Cat(); // up casting
anis[0].say();
anis[1].say();
anis[2].say();
anis[3].say();
anis[4].say();
System.out.println();
// 반복문 이용가능
for (int i = 0; i < anis.length; i++) {
anis[i].say();
}
System.out.println();
for (Animal animal : anis) {
animal.say();
}
// 다형성은 이렇게 배열로 묶기위해서만 사용되는 것은 아님.
// 메소드의 파라미터(매개변수)나 리턴타입에서도 매우 유용하게 사용됨.
// 안드로이드 앱개발에서도 매우 많이 사용되는 기술임.
// 다음 프로젝트에서
}
}
반응형
'코딩일기 > JAVA' 카테고리의 다른 글
Java - 오브젝트 클래스 Object Class (0) | 2023.01.31 |
---|---|
Java - 인터페이스 Interface (0) | 2023.01.30 |
Java-상속 Inheritance (0) | 2023.01.27 |
Java - 생성자 Constructor (0) | 2023.01.26 |
JAVA- 메소드 오버로딩 method overloading (0) | 2023.01.25 |