상속 클래스 변수의 할당
- 상위 클래스 변수에 하위 클래스 객체 할당 가능
- Student / Professor는 Person 중 하나이므로 Person 변수에 할당 가능
예시
Person p;
p = new Person(); // 가능
p = new Professor(); // 가능
p = new PartTimeProfessor(); // 가능
Person[] per = new Person[3];
Professor prof = new Professor();
Student stud = new Student();
per[0] = prof; // 가능
per[1] = stud; // 가능
per[2] = new PartTimeProfessor(); // 가능
- 상위 클래스 변수에 할당된 객체는 상위 클래스의 객체로 간주
per[0] = prof;
per[0].getName(); // 가능 : per[0]는 Person 객체로 간주되므로 이 호출은 성립함.
per[0].getEmployeeNumber(); // 불가능 : per[0]는 Professor 객체로 간주되므로 이 호출은 에러가 남.
- 하위 클래스 변수에 상위 클래스 객체를 지정 할 수 없음.
- 모든 파트 타임 교수는 교수이지만, 교수가 파트 타임 교수는 아님
Professor prof;
prof = new Person(); // 불가능
prof = per[0]; // 불가능
prof = new PartTimeProfessor(); // 가능
캐스팅
캐스팅이란?
하나의 타입을 다른 타입으로 강제로 변화하는 과정임.
double x = 3.405;
ubt nx = (int)x;
- 클래스간 캐스팅
- 하나의 클래스 객체를 다른 클래스로 강제로 변환
- 하위 클래스 객체를 상위 클래스로 캐스팅은 허용
- But, 상위 클래스 객체를 하위 클래스로 캐스팅은 허용되지 않음.
- 하나의 클래스 객체를 다른 클래스로 강제로 변환
Person[] per = new Person[3];
per[0] = new Professor();
per[1] = new Student();
per[2] = new PartTimeProfessor()
Professor prof1 = (Professor)per[0]; // 가능
Professor prof2 = (Professor)per[1]; // 불가능
Professor prof3 = (Professor)per[2]; // 가능
Professor prof3 = (Professor)(new Person()); // 불가능
instanceof
instanceof 연산자란?
어떤 클래스의 인스턴스인지 판단하기 위한 연산자임
true 또는 false 값을 반환
예시
Person per = new Professor();
if(per instanceof Person) {
System.out.println(per.getName()); // true
}
if(per instanceof Student) {
System.out.println(((Strudent)per).getStudentNumber()); // false
}
if(per instanceof Professor) {
System.out.println(((Professor)per).getEmployeeNumber()); // true
}
코드 | 결과 |
per instanceof Person | true |
prof instanceof Person | true |
per instanceof Professor | false |
! (prof instanceof Person) | false |
! prof instanceof Person | syntax error |
dalmation instanceof "Dog" | syntax error |
null instanceof String | false |
예제
Person[] per = new Person[3];
per[0] = new Professor();
per[1] = new Student();
per[2] = new PartimeProfessor();
for ( int i=0; i < per.length; i++ ) {
if ( per[i] instanceof Person ) {
System.out.println( “per[“+i + “]는 Person 클래스의 객체입니다”);
}
if ( per[i] instanceof Student ) {
System.out.println( “per[“+i + “]는 Student 클래스의 객체입니다”);
}
if ( per[i] instanceof Professor ) {
System.out.println( “per[“+i + “]는 Professor 클래스의 객체입니다”);
}
if ( per[i] instanceof PartimeProfessor ) {
System.out.println( “per[“+i + “]는 PartimeProfessor 클래스의 객체입니다”);
}
}
결과
더보기
per[0]는 Person 클래스의 객체입니다
per[0]는 Professor 클래스의 객체입니다
per[1]는 Person 클래스의 객체입니다
per[1]는 Student 클래스의 객체입니다
per[2]는 Person 클래스의 객체입니다
per[2]는 Professor 클래스의 객체입니다
per[2]는 PartimeProfessor 클래스의 객체입니다
728x90
'공부 > Java' 카테고리의 다른 글
[JAVA] 객체 - 선언, 생성, 대입 (1) | 2025.05.22 |
---|---|
Garvage Collection이 뭔데? 어떻게 작동하는 건데? (1) | 2025.05.07 |
자바의 Boxing과 Unboxing: 오토박싱과 언박싱 제대로 이해하기 (0) | 2025.05.06 |