RTTI(런타임 유형 식별)는 Java에서 매우 유용한 메커니즘입니다. RTTI는 Java가 실행될 때 클래스 관련 정보를 유지합니다.
다형성은 RTTI를 기반으로 구현됩니다. RTTI의 기능은 주로 Class 클래스에 의해 구현됩니다.
수업 수업
클래스 클래스는 "클래스 오브 클래스"(클래스 오브 클래스)입니다. 클래스가 객체의 추상화 및 컬렉션인 경우 Class 클래스는 클래스의 추상화 및 컬렉션입니다.
각 Class 객체는 다른 클래스를 나타냅니다. 예를 들어, 다음 프로그램에서 Class 클래스의 객체 c1은 Human 클래스를 나타내고 c2는 Woman 클래스를 나타냅니다.
다음과 같이 코드 코드를 복사합니다.
공개 수업 테스트
{
공개 정적 무효 메인(문자열[] 인수)
{
인간 aPerson = 새로운 인간();
클래스 c1 = aPerson.getClass();
System.out.println(c1.getName());
인간 anotherPerson = new Woman();
클래스 c2 = anotherPerson.getClass();
System.out.println(c2.getName());
}
}
수업인간
{
/**
*접속자
*/
공개 int getHeight()
{
this.height를 반환합니다.
}
/**
* 돌연변이
*/
공공 무효 성장 높이(int h)
{
this.height = this.height + h;
}
개인 정수 높이;
}
클래스 여성이 인간을 확장합니다.
{
/**
* 새로운 방법
*/
공공 휴먼 giveBirth()
{
System.out.println("아이를 낳으세요");
return(새 인간());
}
}
객체의 getClass() 메소드를 호출하면 해당 Class 객체에 대한 참조를 얻습니다.
c2에서는 Women 객체의 참조를 Human 객체의 참조로 상향 변환하더라도 객체가 가리키는 Class 객체는 여전히 Woman입니다.
Java의 모든 객체에는 해당 Class 객체가 있으므로 Class 객체를 통해 언제든지 객체가 "실제로" 속하는 클래스를 알 수 있습니다. 참조에 대해 어떤 유형 변환을 수행하더라도 객체 자체에 해당하는 Class 객체는 동일합니다. 참조를 통해 메소드를 호출하면 Java는 항상 올바른 Class 클래스에 정의된 메소드를 찾고 Class 클래스에서 코드를 실행할 수 있습니다. 클래스 객체가 존재하기 때문에 유형 업캐스팅으로 인해 Java가 손실되지 않습니다. 이것이 다형성의 원리이다.
getClass: 나는 누구인가?
getClass() 메소드 외에도 Class 클래스의 객체를 호출하는 다른 방법이 있습니다.
다음과 같이 코드 코드를 복사합니다.
공개 수업 테스트
{
공개 정적 무효 메인(문자열[] 인수)
{
클래스 c3 = Class.forName("인간");
System.out.println(c1.getName());
클래스 c4 = Woman.class
System.out.println(c2.getName());
}
}
위에 표시된 두 가지 방법이 있습니다.
1. forName() 메소드는 클래스 이름인 문자열을 매개변수로 받습니다. 그러면 해당 Class 객체가 반환됩니다.
2. Woman.class 메소드는 클래스의 클래스 멤버를 직접 호출합니다. 그러면 해당 Class 객체가 반환됩니다.
수업방식
Class 객체는 클래스 이름, 클래스가 위치한 패키지 등 해당 클래스의 정보를 기록합니다. 다음과 같이 해당 메서드를 호출할 수 있습니다.
다음과 같이 코드 코드를 복사합니다.
getName()은 클래스 이름을 반환합니다.
getPackage()는 클래스가 위치한 패키지를 반환합니다.
Class 객체의 newInstance() 메서드를 사용하여 다음과 같은 해당 클래스의 객체를 생성할 수 있습니다.
다음과 같이 코드 코드를 복사합니다.
인간 newPerson = c1.newInstance();
newInstance()는 매개변수 없이 기본 빌드 메소드를 호출합니다.
클래스 정의의 멤버를 얻을 수 있습니다:
다음과 같이 코드 코드를 복사합니다.
getFields()는 모든 공개 데이터 멤버를 반환합니다.
getMethods()는 모든 공개 메소드를 반환합니다.
반사 분석 클래스를 추가로 사용할 수 있습니다. 여기에는 더 이상 자세한 내용이 없습니다.
Class 클래스의 더 많은 메서드를 보려면 공식 문서를 확인하세요.
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html
클래스 클래스 로딩
Java가 Human 클래스 객체와 같은 특정 클래스의 객체를 생성하면 Java는 메모리에 해당 Class 객체가 있는지 확인합니다.
메모리에 해당 Class 객체가 없으면 Java는 .class 파일에서 Human 클래스의 정의를 찾아 Human 클래스의 Class 객체를 로드합니다.
Class 객체가 성공적으로 로드된 후 다른 Human 객체의 생성 및 관련 작업은 Class 객체를 참조합니다.