수업 세터 {
// 학생과 교사의 나이를 결정하는 방법
// – 캐스팅을 사용하지 않는 경우
// – 각 유형에 대한 메소드를 정의해야 합니다.
// – Person으로부터 상속받은 다른 클래스를 정의하는 경우
// 이 클래스는 또한 새로운 메서드를 정의합니다.
// 무효 setAge(학생 표준, int 나이) {
// 시간 setAge(나이);
// }
// 무효 setAge(교사 tch, int 나이) {
// tch.setAge(나이);
// }
// Person 클래스의 유형뿐만 아니라
// Person 클래스에서 상속되는 모든 클래스의 객체
// 매개변수로 수신 및 참조할 수 있습니다.
// → Person을 상속받은 새로운 클래스를 만들어도
// 캐스트되어 메소드에 전달되기 때문에
// 메소드를 추가할 필요가 없습니다.
공전 비어 있는 setAge(사람 피, 내부 오래된) {
피.setAge(오래된);
// 캐스트 인스턴스가 전달되고
// 다운캐스팅이 필요하시면 클래스 종류를 확인하셔야 합니다.
// 대신에
// → 참조된 인스턴스의 유형을 확인하는 연산자
// → 참조 변수의 유형을 확인하는 대신
// 참조 인스턴스(실제 메모리의 개체)에 대해 확인
// → 다운캐스팅 시 반드시 타입 테스트를 진행해야 합니다.
// → 체크 시 가장 낮은 클래스 타입을 먼저 체크해야 합니다.
만약에(피 대신에 대학생) {
체계.에서.프린트(“학생의 나이가 수정되었습니다.“);
}
다른 만약에(피 대신에 선생님) {
체계.에서.프린트(“선생님의 나이를 수정했습니다.“);
}
}
}
공공의 수업 File01_캐스팅 {
공공의 공전 비어 있는 주로(선() 인수) {
// 유형 변환
// 클래스 유형 간 변환, 예: B. 기본 데이터 유형의 변환
// 정수 더블
// – 상속 관계에 있는 클래스 사이에서만 변환 가능
// – 유형
// 업 캐스팅
// 슈퍼클래스 유형으로 변환
// 자동으로 변환됩니다.
// 다운 캐스팅
// 하위 클래스 유형으로 변환
// 강제 변환.
// – 사람의 특징을 그대로 가지고 있다.
// 우리는 학생이자 교사입니다.
// 사람이라고 할 수 있습니다.
// → 격려
// – 임의의 사람 신고
// 그들을 학생이나 교사라고 부를 수 없습니다.
// 누군지 정확히 모르기 때문에
// → 부수다
//————————————————– —————-
대학생 표준1 = 새로운 대학생(“홍길동“, 18, “20210000“, 2, 3.2);
체계.에서.프린트(표준1);
// 하위 클래스의 객체를 참조하는 참조 변수의 주소
// 상위 클래스의 참조 변수에 전달(복사)
// = 같은 주소 참조 = 같은 객체 참조
// → 접속 가능한 회원이 제한됩니다.
사람 p1 = 표준1; // 격려
p1.setAge(19);
체계.에서.프린트(표준1);
// 두 참조 변수는 모두 동일한 개체를 참조합니다.
선생님 ch1 = 새로운 선생님(“김철수“, 32, “20100009“, “자바“);
체계.에서.프린트(ch1);
// Teacher 클래스도 Person을 상속받으므로
// Person 클래스 유형으로 캐스팅이 가능합니다.
p1 = ch1;
p1.setAge(33);
체계.에서.프린트(ch1);
// 슈퍼클래스 유형의 참조 변수에 저장된 참조
// 하위 클래스 유형의 참조 변수에 전달(복사)
// 부모 클래스는 하위 클래스에 대한 정보가 없습니다.
// 하위 클래스가 얼마나 깊은지 모르겠습니다.
선생님 ch2 = (선생님)p1; // 던져 버리다
ch2.setSubject(“기계적 인조 인간“);
// → 다운캐스트 타입만큼 많은 멤버를 사용할 수 있습니다.
체계.에서.프린트(ch2);
//————————————————– ——————
// 파괴적인 조건
// – 다운캐스트할 하위 클래스 유형의 요소가 인스턴스에 존재해야 합니다.
// → 상위 클래스 유형의 참조 변수는 업캐스트된 객체를 참조해야 합니다.
사람 p3 = 새로운 사람(“이영희“, 21);
체계.에서.프린트(p3);
// 학생 표준2 = (학생)p3;
// → p3가 참조하는 인스턴스에는 Student 클래스의 구성원이 없습니다.
// → 다운캐스팅 후에도 접속 가능한 멤버가 없습니다. → 캐스팅이 불가능합니다.
// → 사람을 학생이나 선생님이라고 부를 때
// 이 속성을 가진 사람만 호출할 수 있습니다.
// → 타입이 일치하지 않을 경우 java.lang.ClassCastException 에러 발생
//————————————————– ———————
세터.setAge(표준1, 16); // 클래스 유형 학생의 객체를 전달합니다.
체계.에서.프린트(표준1);
세터.setAge(ch1, 40);
체계.에서.프린트(ch1);
}
}