캐스팅이란(Casting) : 캐스팅이란 타입을 변환하는 것을 말하며 형변환이라고도 한다. 자바의 상속 관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능하다.
업캐스팅이란(Upcasting) : 업캐스팅이란 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것을 말한다.
아래 코드에서 부모 클래스는 Person, 자식 클래스는 Student이다. 아래 코드에서 Person p = s; 부분이 업캐스팅한 부분이다. p가 Student 객체를 가리키지만, p는 Person 타입이기 때문에 Person 클래스의 멤버에만 접근이 가능하다. 그렇기 때문에 p.check에서 컴파일 타임 에러가 발생한다.
다운캐스팅이란(Downcasting) : 업캐스팅과 반대로 캐스팅 하는 것을 다운캐스팅이라고 한다. 업캐스팅된 것을 다시 원상태로 돌리는 것을 말한다. 하위 클래스로의 다운캐스팅을 할때는 타입을 명시적으로 지정해줘야한다는 특징이 있다.
아래 코드를 보면 Student s = (Student)p; 라고 나오는데 이 부분이 바로 다운캐스팅이다.
부모클래스
과일이라는 클래스는 모든 과일을 다 포함하고있는 부모클래스로 바라볼수있다. 부모클래스에서는 자식클래스로 상속이 가능하다 그러기 때문에 showInfo()메소드는 부모클래스에서 만들어 놓으면 자식클래스에서 재구성을해서 기능을 추가적으로 쓸수가 있다.
자식클래스1
어떠한 자식클래스에서 상속을 받을지 모른다. 그러기때문에 자식클래스에서 멤버변수에 값을 초기화시켜 자기 자신의 클래스의 정보들을 추가적으로 쓰면된다.
자식클래스2
Banana라는 클래스에서도 Fruit의 부모클래스를 상속을 받았다 그런데 여기서는 orgin이라는 값을 추가적으로 쓰고싶어
멤버변수를 선언하여 원산지를 작성했다. 그리고 추가적으로 Banana에서만 세일이라는 기능의 메소드를 추가를 해줬다.
바나나의 가격인 3000원에서 세일한 2000원이 출력이 되게끔!
코드의 결과
1. 부모클래스의 Fruit의 부모클래스를 배열로 5개의 공간을 만들어주었다.
2. 배열의 변수명을 fruits라고 지어주었다.
3. fruits의 인덱스 값을 차례대로 Peach객체와 Banana의 객체를 new(생성) 대입을 해준다.
4.for문을 배열의 변수 fruits의 길이(.lenght)만큼 반복을 돌려준다.
5. 실행의 조건은 먼저 1. fruits[ i ] != null --> 해석 : fruits[ i ]번째 값이 빈값이 아닐때 즉, 값이 있을때 실행해라!
2. if (fruits[ i ] instanceof Banana) 만약 fruits[ i ]번째 객체 타입이 맞는지 instanceof(확인)을한다.
3. 맞으면 바나나의 를 세일을 해라 ( saleBanana() ) 그런데 타입을 다운캐스팅을 해서 타입을
맞춰준다. ((Banana) fruits[ i ]).saleBanana() --> 다운 캐스팅
6. 그리고나서 차례대로 showInfo()를 해주면서 바나나는 세일한 가격 나머지는 정보를 출력을 해준다.
'개발일지 > 자바' 카테고리의 다른 글
인터페이스(Interface) (0) | 2022.09.07 |
---|---|
디자인패턴 - 템플릿 패턴(final 사용법) (0) | 2022.09.07 |
추상 클래스 (0) | 2022.09.05 |
상속(부모, 자식 클래스) , 다형성 - 오버라이드(@Override) (0) | 2022.09.05 |
배열 - Array (0) | 2022.09.04 |
댓글