Java에서 강제 유형 변환은 기본 데이터 유형과 참조 데이터 유형의 두 가지 유형으로 구분됩니다. 여기서 논의하는 후자는 참조 데이터 유형의 강제 유형 변환입니다.
Java에서는 상속과 상향 변환으로 인해 하위 클래스를 매우 자연스럽게 상위 클래스로 변환할 수 있지만 상위 클래스에서 하위 클래스로 변환하려면 강제 변환이 필요합니다. 하위 클래스는 상위 클래스보다 더 많은 속성과 강력한 기능을 갖기 때문에 상위 클래스에서 하위 클래스로 변환하려면 강제가 필요합니다. 그렇다면 상위 클래스가 하위 클래스로 변환되기만 하면 성공할 수 있을까? 실제로, 둘 사이의 강제 유형 변환은 조건부입니다.
유형 생성자를 사용하여 객체를 생성할 때 객체의 유형은 이미 결정되어 있으므로 그 본질은 변하지 않습니다. Java에서는 상위 클래스 유형을 사용하여 상속 및 상향 변환을 통해 참조할 수 있습니다. 이때 더 강한 객체를 참조하기 위해 더 약한 유형을 사용하는 것이 가능합니다. 그러나 더 약한 유형을 더 강한 객체로 강제 변환하면 작동하지 않을 수 있습니다.
설명하기 위해 예를 들어보세요. 예를 들어 시스템에는 아버지와 아들이라는 두 개체가 있습니다. 먼저 Son 객체를 생성한 다음 이를 Father 유형 변수로 참조합니다:
Father father = new Son();
여기서 Son 객체 인스턴스는 father로 업캐스트되지만 메모리에 있는 이 Son 객체 인스턴스의 본질은 여전히 입니다. 아들형이지만 일시적으로 능력이 약해졌는데, 강해지고 싶다면 어떻게 해야 할까요? 개체 유형을 복원하십시오!
Son son = (Son)father;
이 진술은 실제로 가능합니다. 아버지 참조는 여전히 아버지 유형이지만 강화 후 Son 개체 인스턴스로 전송됩니다. son 변수를 참조하면 실제 몸체가 복원되고 모든 기능을 사용할 수 있습니다.
앞서 언급했듯이 부모 클래스를 하위 클래스로 강제하는 것이 항상 성공하는 것은 아니며, 어떤 상황에서 실패합니까?
참조 유형의 실제 ID가 상위 클래스 자체의 유형인 경우 강제 유형 변환으로 인해 오류가 발생합니다. 예:
Father father = new Father(); Son son = (Son) father;
이 시스템은 ClassCastException 예외 정보를 발생시킵니다.
따라서 컴파일러는 컴파일 중에 유형 간에 상속 관계가 있는지 여부만 확인하고, 그렇다면 통과하고 런타임 시 실제 유형을 확인하고, 그렇다면 통과합니다. 그렇지 않으면 ClassCastException이 발생합니다.
따라서 상속에서는 하위 클래스가 자동으로 상위 클래스로 변환될 수 있지만 상위 클래스가 하위 클래스로 강제 변환되면 참조 유형의 실제 ID가 하위 클래스인 경우에만 강제 변환이 성공합니다. 그렇지 않으면 실패할 것입니다.
위 내용은 Java Improvement Chapter(10)----강제 유형 변환 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!