[Java] 형변환, upcast, 인터페이스
- 형변환

자료형, 상속관계 등의 형변환과 달리 클래스간에는 불가능하다
여기에서 b=a;를 했을 시, 각각의 데이터 타입이 다르기 때문에 불가능한 것이다.
- Upcast

자식인 ob1이 부모인 ob2에 들어가는 것이므로 upcast이다
SuperTest의 변수b는 20, SubTest의 b는 100일 경우, upcast를 기준으로 b의 변수가 달라지는 것을 알 수 있다
특히 메소드 영역은 upcast로 ob1이 ob2로 들어갔어도 자식것으로 출력된다
ob2.hap의 경우, 자식인 ob1이 들어갔기 때문에 자식 기준으로 값이 출력된다.
downcast)
ob2.print(); -> 부모의 메소드가 출력된다. 하지만 밑의 경우는 downcast로 자식의 메소드가 출력된다.
((SubTest)ob2).print(); : 앞에 자식의 클래스명을 괄호속에 넣어준다.
- Interface 인터페이스
추상클래스의 일종이며, 단순히 선언만 하고 정의(내용)가 없다.
변수는 final변수만 선언 가능하다.
인터페이스 구현 시에는 'implements'를 사용하며, 모든 메소드를 재정의해야 한다.
다른 인터페이스를 상속받을 수 있으며 그 때는 'extends'를 사용한다.
인터페이스는 다중구현이 가능하다.


여기에서 구현받은 ob1이 인터클래스 ob2로 들어가는 것 역시 upcast라고 할 수 있다.
하지만 주의해야 할 것은, 메소드 출력 시 부모에게 없는 메소드는 에러가 난다.
getName메소드는 부모도 있기 때문에 괜찮지만, getItem은 자식에게만 있는 메소드이므로 안된다.
TestImpl ob = new TestImpl(); 식은 기본이고, 여기에서
Test ob = new TestImpl(); 앞에 구현한 인터페이스인 Test를 놓을 수도 있다.
interface A{ (메소드 2개)
interface B extends A { (메소드 1개) : 위와 상속관계
class C implements B { ~ : 위를 구현
-> C에는 최소 메소드가 몇개일까?
최소 3개이다. 위의 메소드들이 총 누적되어 C에게 나타난다.


packing메소드 옆 괄호를 주목해보자.
나아가 하단의 if절 내 불러온 packing 메소드의 괄호도 함께 보자면
주석에서 나타나듯, ItempFruit ob 와 new Orange는 같기 때문에 인식이 되는 것이다.
또한 메인절에서 Test5를 객체 생성해줬기 때문에 t.메소드를 호출할 수 있다.