어벤져스 예시를 통해 이해해보자.
fight메소드를 가지는 Avengers클래스와
Avengers클래스를 상속받는 어벤져스 멤버들의 클래스를 만들어준다.
어벤져스 멤버들의 클래스는 fight를 override해서 각각 싸울 때 나는 소리를 출력이 되도록 하였다.
6명의 어벤져스 클래스와, Avengers에 숨어들어있는 Loki클래스를 만들어준다.
Avengers를 상속받으며 Avengers타입이긴 하다.
Loki클래스타입이면 걸러주는 방향으로 코드를 짜볼 것 이다.
Polymorphism 클래스 안에
어벤져스인지 아닌지 판단하는 메소드 whoAreYou를 만들어 주고
if문을 통해 어벤져스 여부를 걸러낸다.
외부에서 Avengers 타입을 받아와야한다. : Avengers a
Avengers타입으로 각 자식클래스들의 생성자들을 호출하는건 업 캐스팅이다.
어찌됐던 타입은 Avengers!
그러면 Avengers a에는 뉴헐크 뉴아이언맨...들이 들어있다.
new IronMan에서 a를 전달하면 a를 아이언맨을 볼줄알아야한다.
a에 담긴게 누구의 생성자인지 타입으로 나눌 수 있게 된다.
반복을 돌건데 랜덤으로 배열안에 값들을 뽑아내볼거다.
Loki는 어벤져스에 숨어들어왔기 때문에 Loki가 발견되면 break하게 해보자.
whoAreYou안에서체크를 해줘야한다. 왜냐하면 밖에서는 여기에 무슨일이 일어나는지 모른다.
boolen isLoki = false;
초기값을 false로 잡아준다.
이 isLoki를 사용하는 부분에 알려줘야하기때문에 void를 boolean타입으로 바꿔준다. boolean타입으로 리턴을 돌려준다.
public void whoAreYou~~
을
public boolean whoAreYou~~~
로 변경 (사진 첨부 x)
이 메서드는 사용하는 부분 전체를 참 또는 거짓 값 으로 볼 수 있다.
즉, 참이면 break;
이제 랜덤으로 for문을 돌려 출력해보자.
if(p.whoAreYou(avengers[index])) break;
boolean타입으로 진행했고 지금 isLoki의 값은 true이다.
if문이 true가 되면 break가 된다.
즉, Loki가 나오게 되면 멈추게 된다.
< 출력 결과 >