대입 연산자의 좌우변은 타입을 일치시키는 것이 가장 이상적이다

Time T = new Time();
Human H = new Human();
T = H;
// 위 예제는 에러가 난다. 서로의 타입이 다르기 때문에

int i = 1234;
long k = i;
// 위 예제는 에러가 나지 않는다. long타입의 표현 범위가 int의 표현 범위를 완전히 포함하기 때문에
    역으로 대입할때에는 캐스팅을 하면 상관없다

Human Kim = new Student(" ")
Kim.Intro()
// 위 예제는 에러가 나지 않는다. 학생은 일종의 사람이기 때문이다

Student Kim = new Human(" ")
Kim.Intro()
// 위 예제는 에러가 난다. 모든 사람이 학생일수는 없기 때문이다

Student S  = new Student(" "_)
Human H = S
Student Kim = (Student)H
Kim.Intro()
// 이런식으로 캐스팅을 해야 에러없이 진행할수 있다



// 대표타입의 실용성을 보여주는 예제






as 연산자는 두 개의 피 연산자를 취하며 안전하게 타입을 변환한다
A as B 형식으로 사용하며 A 객체를 B 타입으로 변환한다
무조건 변환하는 것이 아니라 is a 관계가 성립하는지를 확인 후 안전하다고 판단될 때만 변환하며 그렇지 않으면 null을 리턴한다

is 연산자는 타입을 점검하기만 하고 as는 타입을 점검한 후 변환까지 수행한다는 점이 다르다

Posted by 코딩하는 야구쟁이
,