728x90
728x90
= 다형성 (casting, instanceof) (2)
= 강제 타입 변환(Type Casting)
우선 강제 타입 변환의 형태
자식클래스 변수 = (자식클래스) 부모클래스타입;
밑줄 친 부분 : 자식 타입이 부모 타입으로 변환된 상태
약간 전 이걸 보면서, 큰 개념인 부모클래스타입에서 자식클래스타입으로 쪼개서 넣어주는 것으로,
강제타입변환과 같은 방식으로 사용하는 개념이구나 라고 이해했습니다.
간단하게, 예시로 먼저 접근해보겠습니다.
public class Animal {
public void walk() {
System.out.println("동물이 걷습니다.");
}
}
public class Cat extends Animal {
@Override
public void walk() {
System.out.println("고양이가 걷습니다.");
}
public void punch() {
System.out.println("냥펀치!!!");
}
}
< MainClass >
public class CatExample {
public static void main(String[] args) {
Animal a1 = new Cat();
a1.walk();
Cat c1 = (Cat) a1; //casting - 강제 형변환
c1.punch();
c1.walk();
}
}
< 출력값 >
고양이가 걷습니다.
냥펀치!!!
고양이가 걷습니다.
= instanceof
강제 타입 변환같은 경우에는, 자식 타입이 부모 타입으로 변환되어 있는 상태에만 가능하기 떄문에,
부모타입의 변수가 부모 객체를 참조할 경우 자식 타입으로 변환할 수가 없습니다.
그래서 부모 변수가 참조하는 객체가 부모 객체인지 자식 객체인지 확인해보기 위해서 사용하는 것이
instanceof 연산자입니다.
-사용하는 형태
boolean result = 좌항(객체) instanceof 우항(타입)
보통 사용 하는 방식은
if 조건문에 instanceof를 사용해서 true값이 나올 때, 강제 casting이 실행되도록 많이 사용한다.
= 예제로 개념 접해보기
public class Animal {
public void walk() {
System.out.println("동물이 걷습니다.");
}
}
public class Cat extends Animal {
@Override
public void walk() {
System.out.println("고양이가 걷습니다.");
}
public void punch() {
System.out.println("냥펀치!!!");
}
}
public class Dog extends Animal {
@Override
public void walk() {
System.out.println("개가 걷습니다.");
}
}
< MainClass>
public class InstanceOfExample2 {
public static void main(String[] args) {
Animal a1 = new Animal();
Cat c1 = new Cat();
Dog d1 = new Dog();
System.out.println(a1 instanceof Animal); // true
System.out.println(a1 instanceof Dog); // false
System.out.println(a1 instanceof Cat); // false
System.out.println(c1 instanceof Cat); // true
System.out.println(c1 instanceof Animal); // true
// System.out.println(c1 instanceof Dog); // compile error
System.out.println(d1 instanceof Dog); // true
System.out.println(d1 instanceof Animal); // true
// System.out.println(d1 instanceof Cat); // compile error
}
}
< 출력값 >
true
false
false
true
true
true
true
728x90
'수업 복습하기 > Java' 카테고리의 다른 글
Day 13 - Final (변수, 클래스, 메소드) (7) | 2021.09.06 |
---|---|
Day 13 - 정적 멤버 (Static) (0) | 2021.09.06 |
Day 12 - 다형성(Polymorphism) (1) (0) | 2021.09.02 |
Day 11 - 캡슐화(Encapsulation) (0) | 2021.08.31 |
Day 11 - 접근 제한자(Access Modifier) (0) | 2021.08.31 |