자바 다 형 성 (위로 전환, 아래로 전환)

2045 단어 Java
(1) 방법의 다 태 성: 과부하, 복사;
(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;/트 루 로 돌아 가기
실제 상황 에서 아래로 전환 하 는 데 사용 하 는 것 이 비교적 적다.
위로 전환 하면 주로 매개 변 수 를 통일 하 는 데 사용 되 고 부 류 는 모든 자 류 를 방법 매개 변수 로 하 는데 이때 자 류 는 부 류 를 확대 하 는 방법 이 없다.
조작 의 편 의 를 위해 가능 한 한 아래로 전환 하지 말고 방법 을 확대 하지 마 세 요.

좋은 웹페이지 즐겨찾기