DAY 19 ★★★upcasting(상속의 목적) _2, 다운캐스팅(downcasting)

NA YE SOM·2023년 7월 25일
0

★★★연습문제 ex05_Cup


-> 첫번째 컵 내용이 비어있음


-자바의 난이도 (어려운 구간)


-> coffee의 자식, coffee의 일종


-> coffee로 값을 전달하는 setter, getter만들기


-> 자동으로 해주는 라이브러리도 있음

상속관계 이용해서 americano, latte 모두 coffee 타입으로 만들어줌

americano, latte를 전달받는 파라미터 coffee
(객체안에 객체를 전달해서 담는 과정)


->(ex) 스타크래프트 (섞어서 )
(ex) 버스에 학생, 알바생도 타고

  • downcasting(반대)
  • 추상클래스
  • 인터페이스

ex06_GameUnit

marine Firebat 이 싸운 것



둘중한명 죽을때까지 싸우자 : 언제 죽을지 모르니까 -> while


-> 둘다 살아있으면
싸우는것도 순서가 있어야함

unit1 이 나라고 보고


myTurn 바꾸기 한번 할때마다(아니면 한놈만 팬다)

-> 부정연산(!느낌표- 반대로 바꾸는것)

false로 했으니까 unit2가 선방 날리고 unit1이 날리고 ~

기준 : 둘다 살아있으면 하는것 , 둘중 하나 죽으면 끝나는 것


-> Flag 변수 : 청기올려 내려 : 상태가 둘 중 하나 (ture or false)



-> unit1이 살아있으면) 승리한 것

marine 의 공격력 : final int

에너지 단위 : 50,100 정수 형태로

공격할때마다




-> getter이름 예측


-> getter 임 isAlive라고 만들어진 이유 : boolean타입이라서( Alive라고 해도 똑같은 결과 나옴)

GameUnit이 name을 관장하고 있음

에너지 100 줬는데 죽었다고 하면 틀린것-> 애초에 막기위해서 (pulbic -> private변경)


-> hp가 0보다 크면 setAlive에 true -> true


-> 파라미터 1개(이름만 받아오는것)


marin은 gameunit이 가진 name그대로 쓸 수 있다는 뜻
-> super클래스에 의해서 동작



  • 마무리

unit1,2 가 attack을 불를 수 있다.
GameUnit에있는 메소드를 호출할 수 있다.


모든 GameUnit이
power차이를 둠
power을 marine , firebat에 나눠놓음

marine 은 marine의 공격 구현, firebat은 firebat공격을 구현


other 상대편 hp 를 떨어뜨리는 것 : POWER 만큼
원래 가지고 있던 에너지만큼 줄어들게 ~ other.getHp


HP 바닥 0 -> 0보다 낮아지는 것도 가능해짐

(EX) 1남았을때 10짜리 공격맞으면 -9가 아니라 0이다.


-> 나는 unit1, 공격할 상대방 unit2


-> hp 도 0이되고 alive도 false가 됨

-> 부모(gameunit - getname있고 이름 마린)

-> 마린은 5씩 줄어들음

unit1의 공격대상 other


-> 공격순서
boolean myTurn = true; 바꾸면


downcasting(다운캐스팅) : 부모클래스 타입을 서브클래스 타입으로 바꾸는 것


-> upcasting 가능: super클래스 타입

-> 개체, 변수 앞에 바꾸고 싶은 타입 적으면 ) casting

downcasting하면 overriding없어도 study 부를 수 있음

오버로딩 도움안받고 호출하기!


-> p1을 student로 바꾸는 거 제일 먼저하기

-> 아까 이거 안되서 오버라이딩 했던 것


-> person에 study 넣어버림

person은 eat, sleep 만하고 student는 study만 해




-> student를 worker로 바꾸기(말이 안되는상황)-> 실행하면 안됨


-> 형변환 잘못되었다는 것

instanceof 연산자 : =-*/ 같은 영어로 쓰여있는 연산자


-> a가 b타입의 instance인가?

-> true나옴


-> ture 나옴


-> false나옴

casting하기 전에 if로 돌림 student면 student로 casting
,worker면 worker로 casting
1.안전
2. 코드 자동완성 됨


-> student이면


-> student의 내용을 보여줌
-> 어차피 casting은 해야함


-> p1을 먼저 student로 바꾸고 study 호출하기

★ 다운캐스팅(downcasting)이 반드시 필요한 상황이 있음 - 프로젝트

(결론) 우리가 알고 있는것과 같다(무조건 캐스팅해줘서 잘못될 우려있음)
casting하기전) instanceof로 맞는지 확인해라

(( 가로 2개 ))
instanceof 안하고 그냥 casting해도 됨

용어정리

override : 슈퍼클래스 메소드를 다시 만드는 것

  • 커피콩 모양 (bean 빈)

: 데이터를생성할때 값을 넣든, getter,setter로 하든

값을 넣은 객체를 네트워크 상에서 주고받는것

자바는 부모(슈퍼) 가 없는 클래스가 없다 (딱, Object빼고)

-> 모두 가지고 있음


Person의 부모 -> Object 클래스있음
모든 자식은 부모타입으로 저장 가능(upcasting)
-> 결론) 모든 객체는 Object로 저장할 수 있음(아무조건없어도)

막 쓰면 안됨
Obejct p = new Person 이렇게 저장하면 저장은 되겠지만
object로 저장하면
object만 보임
-> person의 메소드 하나도 보이지 않음
upcasting시) Person으로 저장하면 Person의 메소드가 보임(해결하려고 overriding, downcasting한것)
-> 값을 저장하는 변수 선언시) 문자열 저장할때, 정수 저장할 하나의 변수 필요할 때 있음(그때 타입은 object로 잡음 )

  • upcasting 해결방법 (1) overriding (2) downcasting
    -> 둘 중 해결책 : object클래스 우리가 만든게 아니라 코드 추가 x
    -> overridig 안됨

실무 대부분) overriding으로 해결
object ) downcasting 으로 해결


-> object클래스가 가지고 있는 메소드만 보여줌

  • 자바언어 개발 : 상속언어 개발, 최상위 하나 필요했음


profile
개발자 velog

0개의 댓글