본문 바로가기

JAVA/DAY 15 _ 23.09.06

TypeCasting

AAA a1 = new BBB();	// 우리는 이렇게 쓸일이 거의 없다. 쓸 수는 있다고! 

a1.testA();			// 출력 : A의 매서드


BBB b1 = (BBB)a1;	
// 원래는 BBB b = a; 이거안되는데, 강제로 type casting해준거임
// (부모의 참조변수를 가져올때는 댓가가 필요하다구.)

// BBB b1 = new BBB();		--> 

b1.testB();			// 출력 : B의 매서드
b1.testA();			// 출력 : A의 매서드

// BBB b1 = new BBB();와 BBB b2 = (BBB) a;의 경우
// 모두 BBB 클래스의 객체를 가리키는 것이므로 BBB 클래스의 모든 메서드와 속성을 호출할 수 있다!
//  --> BBB객체를 a1으로 받아서 다시 b1에 넘겨주는게 그냥 BBB b1 = new BBB();와 같다는 뜻임. 
//  ### 이 페이지는 타입캐스팅을 알려주려고 만든페이지임!

// BBB b1 = new BBB();
// b1.testB(); // BBB 클래스의 testB() 메서드 호출
// b1.testA(); // AAA 클래스의 testA() 메서드 호출
//
// BBB b2 = (BBB) a;
// b2.testB(); // BBB 클래스의 testB() 메서드 호출
// b2.testA(); // AAA 클래스의 testA() 메서드 호출

 

//	BBB b1 = (BBB)a1; : a1 변수를 BBB 클래스의 참조 변수 b1에 할당하기 전에 명시적인 타입 캐스팅을 수행
//	---> 이것은 a1 변수가 BBB 클래스의 객체를 가리키고 있음을 알고 있기 때문에 가능한거임!!!
//	---> 이 작업을 통해 b1 변수는 BBB 클래스의 참조가 되며, BBB 클래스의 멤버를 사용할 수 있다.
		
		
if(a1 instanceof BBB) {		// 변수 a1이 BBB 클래스의 인스턴스인지 여부를 확인
// --> 즉, a1이 BBB 클래스 또는 BBB 클래스의 하위 클래스의 객체를 가리키는지 확인하는것
    b1 = (BBB)a1;
    b1.testB();
}else {
    System.out.println("a1은 BBB가 아니다");
}

// --> 런타임에 객체의 '실제 타입을 확인'하고 해당 타입으로 안전하게 캐스팅하여 메서드를 호출하는 방법임 (잘 사용 X)

'JAVA > DAY 15 _ 23.09.06' 카테고리의 다른 글

상속_array활용  (0) 2023.09.12
Object class  (0) 2023.09.12
Polymorphism  (1) 2023.09.12
Basic  (0) 2023.09.12
Final  (0) 2023.09.12