[JAVA] INSTANCEOF 연산자
@욕심쟁이
·2020. 9. 8. 12:03
반응형
instanceof 연산자
- 어떤 객체가 특정 클래스 타입의 인스턴스인지를 판별하는 연산자
→ 형변환 가능 여부를 판별
- 판별결과를 boolean타입변수에 결과값을 저장하거나 if문 등의 조건식에 직접 사용하여 판별
- 판별결과가 true이면 형변환이 가능한 관계라는 의미
업캐스팅 또는 다운캐스팅 가능한 관계 모두 treu가 리턴됨
<기본문법>
a instanceof B
→ a : 객체(참조변수)
→ b : 클래스명(또는 인터페이스명)
예제)
public class Ex2 {
public static void main(String[] args) {
Parent2 p2 = new Parent2();
if(p2 instanceof Child2) {
//판별결과가true이면 무조건 CHild2차입으로 변환가능
//=>서브클래스를 이미 업캐스팅 해놓은 상태이므로 형변환 가능하다는 True가 리턴됨
System.out.println("p -> Child2타입으로 형변환 가능");
//Child2 c = p2;//자동형변환은 불가능한 관계이므로
Child2 c = (Child2)p2;
}else {
//판별결과가 true이면 어떠한 변환도 불가능
//->슈퍼클래스 타입 인스턴스이므로 다운 캐스팅 불가!
System.out.println("p -> Child2타입으로 형변환 불가능");
}
System.out.println("==============================================");
//SmartPhone인스턴스(sp)생성
SmartPhone 내폰 = new SmartPhone();
//내폰은 SmartPhone입니까?
if(내폰 instanceof SmartPhone) { //변수명 instanceof 타입
System.out.println("내폰은 SmartPhone이다.");
SmartPhone 동생폰 = 내폰;
동생폰.call();
동생폰.sms();
동생폰.kakaoTalk();
동생폰.youtube();
}
System.out.println("==============================================");
if(내폰 instanceof HandPhone) {
System.out.println("내폰은 HandPhone입니다.");
System.out.println("그러므로 HandPhone으로 형변환 가능하다!");
HandPhone 엄마폰= 내폰;
System.out.println("내폰은 HandPhone의 모든 기능을 포함한다!");
엄마폰.call();
엄마폰.sms();
}
System.out.println("==============================================");
HandPhone 엄마폰 = new HandPhone();
if(엄마폰 instanceof SmartPhone) {
System.out.println("엄마폰은 SmartPhone입니다.");
}else {
System.out.println("엄마폰은 SmartPhone이 아닙니다.");
}
System.out.println("==============================================");
HandPhone 엄마폰2 = new SmartPhone();
if(엄마폰2 instanceof SmartPhone) {
System.out.println("엄마폰2은 SmartPhone입니다.");
SmartPhone 내폰2 = (SmartPhone)엄마폰2;
System.out.println("엄마폰은 SmartPhone의 모든기능을 포함");
System.out.println("따라서 SmartPhone의 형변환 후에도");
System.out.println("정상적으로 SmartPhone의 모든 기능 사용가능");
내폰2.call();
내폰2.sms();
내폰2.kakaoTalk();
내폰2.youtube();
}else {
System.out.println("엄마폰은 SmartPhone이 아닙니다.");
}
}
}
class Parent2{
}
class Child2 extends Parent2{
}
//----------------------------------------------
class HandPhone{
String phoneNumber;
public void call() {
System.out.println("HandPhone의 전화기능!");
}
public void sms() {
System.out.println("HandPhone의 문자기능!");
}
}
class SmartPhone extends HandPhone{
String osName;
public void kakaoTalk() {
System.out.println("SmartPhone의 카카오 기능!");
}
public void youtube() {
System.out.println("SmartPhone의 유튜브 기능!");
}
}
반응형
'IT > JAVA' 카테고리의 다른 글
[JAVA] 디자인 패턴(Design patterns)::싱글톤(Singleton):: (0) | 2020.09.14 |
---|---|
[JAVA]추상클래스와 추상메서드(Abstract) (0) | 2020.09.11 |
[JAVA] 형변환(기본형변환/참조형변환[upcasting/downcasting]) (0) | 2020.09.07 |
[JAVA] FINAL 키워드 (0) | 2020.09.02 |
[JAVA] 상속(Inheritance)[부모(슈퍼)클래스/ 자식(서브)클래스]1 (0) | 2020.08.31 |