(혼) (공) (자)

Class 다형성 / 타입변환

만석이 2024. 1. 16. 01:22

자료형 데이터 타입변환에는 두가지 종류가 있었다.

 

1. 자동형변환

2. 강제형변환

 

개념은 작은것에서 큰곳으로 이동할 때 는 자동 큰것에서 작은것으로 이동할 때 는 강제 형변환이되는것이다.

조금 다른 개념도있다. (자식은 더크다고 생각할수있다. 상속받고 자식객체에서 필드 생성할수있으니까.)

그것이 자료형 형변환과 클래스의 형변환의 차이점이라고 볼수있다.

 

정리하자면 부모클래스가 자식클래스에 접근하기위해 형변환을 한다.

 

바로 예시를 보자

package Class_Casting;

 

 

class Car{

 

void Sound() {

System.out.println("빵빵");

}

};

class Bus extends Car{

 

@Override

void Sound() {

super.Sound();

System.out.println("뿡뿡 오버라이딩");

}

 

void Sound1() {

System.out.println("뿡뿡");

}

};

public class Class_Casting {

public static void main(String[] args) {

 

 

Car c = new Bus(); //자동형변환

 

Bus bus = (Bus)c; //강제형변환

 

bus.Sound();

}

}

 

main 부터 보면 Bus클래스의 객체를 Car타입으로 변수c에 담아주었다.

그럼 현재 변수 c는 부모객체타입이기 때문에 자식클래스에는 간섭을 못한다.(오버라이딩 제외)

그런데 여기서 나는 자식클래스에게도 접근하고싶다.

 

그래서 c를 자식클래스 타입으로 강제형변환을 해주었다.   

 

강제형변환을 하게되면 버스클래스의 sound1 도 접근해서 출력이 가능해진다.

 

 

정리 - 자동형변환 하면 자식클래스 객체를 부모클래스 타입으로 변환    자식 - > 부모 타입

           강제형변환 하면 부모타입으로 만든 자식객체를 다시 자식타입으로 변환  부모->자식 타입