자바 다 형 성 (위로 전환, 아래로 전환)
2045 단어 Java
(2) 대상 의 다 태 성: 부자 류 대상 의 전환;
위로 전환: 하위 클래스 대상 이 부모 클래스 대상 으로 바 뀌 고 부모 클래스 대상 = 하위 클래스 인 스 턴 스, 자동 으로 전환 합 니 다.
아래로 전환: 부모 클래스 대상 이 하위 클래스 대상 이 되 고 하위 클래스 대상 = (하위 클래스) 부모 클래스 인 스 턴 스, 강제 전환;
class A{
public void print(){
System.out.println("A");
}
}
class B extends A{ //继承A类
public void print(){ //方法覆写
System.out.println("B");
}
}
public class Main{
public static void main(String arg[]){
A a = new B(); //向上转型
a.print(); //调用覆写的方法
}
}
실행 결과: B
이 프로그램 은 대상 이 위로 전환 되 었 습 니 다. 대상 이 대상 을 호출 했 지만 사례 화 된 것 은 하위 대상 이 고 print () 방법 은 하위 클래스 에 덮어 쓰 였 습 니 다. 최종 적 으로 B 류 에 덮어 쓰 는 print () 방법 을 호출 했 습 니 다.방법 은 A 류 이지 만 실례 화 된 것 은 하위 클래스 대상 이 고 print () 방법 은 하위 클래스 에 덮어 쓰 였 으 며 최종 적 으로 B 류 에 덮어 쓰 는 print () 방법 을 호출 했다.
public class Main{
public static void main(String arg[]){
A a = new B(); //向上转型
B b = (B)a; //向下转型
b.print();
}
}
실행 결과: B
대상 이 아래로 전환 되 었 습 니 다. 이 프로그램 은 부모 클래스 대상 을 하위 클래스 인 스 턴 스 로 강제로 바 꾸 었 습 니 다. 이 프로그램 은 여전히 하위 클래스 대상 (new B () 이기 때문에 최종 호출 방법 은 복 사 된 print () 방법 입 니 다.
public class Main{
public static void main(String arg[]){
A a = new A(); //没有转型
B b = (B)a; //向下转型
b.print();
}
}
실행 결과: thread "main"java. lang. ClassCastException: A cannot be cast B
프로그램 컴 파일 시 오류 가 발생 하지 않 았 으 나 실행 시 ClassCastException 오류 알림 이 발생 하여 클래스 변환 이상 을 표시 합 니 다.
따라서 대상 이 아래로 전환 하 는 관계 가 발생 하기 전에 반드시 대상 이 위로 전환 하 는 관계 가 발생 해 야 한다.
아래로 전환 작업 이 발생 하기 전에 먼저 판단 하고 전환 할 수 있 습 니 다. instanceof 키 워드 를 사용 합 니 다.
대상 instanceof 클래스 → Boolean 형 으로 되 돌아 가기
예: a instanceof A;/트 루 로 돌아 가기
실제 상황 에서 아래로 전환 하 는 데 사용 하 는 것 이 비교적 적다.
위로 전환 하면 주로 매개 변 수 를 통일 하 는 데 사용 되 고 부 류 는 모든 자 류 를 방법 매개 변수 로 하 는데 이때 자 류 는 부 류 를 확대 하 는 방법 이 없다.
조작 의 편 의 를 위해 가능 한 한 아래로 전환 하지 말고 방법 을 확대 하지 마 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.