class 검은고양이 extends고양이{}
고양이 a검은고양이=new검은고양이();
a.검은고양이.야옹();
변수의 타입 (고양이) 과 객체 타입 (검은 고양이) 이 같지 않다.
변수가 고양이라서 a검은고양이에는 고양이 리모콘만 들어갈 수 있다.= 고양이만 연결
검은고양이는 고양이인가? ㅇㅇ
통합 리모콘을 만들면 한방에 다 처리할 수 있으니 편하다. 하지만 고유의 기능은 처리하기 어려움.
TV aTv1 =new LGTv();
TV aTv2 =new 샤오미Tv();
TV aTv3 =new 삼성Tv();
TV aTv4 =new 독일Tv();
TV[] tvs = new TV[4];
tvs[0]=aTv1;
tvs[1]=aTv2;
tvs[2]=aTv3;
tvs[3]=aTv4;
for(TV tv:tvs) { /향상된for문 tvs 배열 안에 있는 요소만큼 반복함(4번)
tv.끄기(); //모든 티비 다 끌 수 있음
}
TV[] tvs = new TV[4];
는 TV가 4개 생긴거 아님.티비 리모콘 담은 변수 (예:aTv1) 4개 담은거임.
자동차 a자동차=new 페라리();
페라리 a페라리=a자동차;
class 자동차{}
class 페라리 extends 자동차{}
이거 자동형변환 안해줌
자동차 a자동차=new 스파크();
페라리 a페라리=a자동차;
class 자동차{}
class 페라리 extends 자동차{}
class 스파크 extends 자동차{}
이럴 때 페라리의 리모콘은 스파크랑 연결된다.
자바 컴파일러는 new 페라리()
,new 스파크()
보지도 않음.
페라리 a페라리=a자동차;
a자동차 "자동차 가리키는 리모콘있음 그거 복사해줄테니 같이 같은거 가르키자"
a페라리 "나 페라리랑만 연결될 수 있는데 너가 가리키는 자동차가 페라리가 맞아?"
그럴수도있고 아닐수도 있음. => 안전하지 않음 => 자동형변환 안해줌
수동형변환 해야함.근데 개발자가 안전하다고 판단한 경우에만 수동형변환을 해야함.
페라리 a페라리=(스파크)a자동차;