실행 시 자바 의 다 태 성 실현

운행 시 다 태 성 은 대상 프로그램 설계 코드 를 다시 사용 하 는 가장 강력 한 메커니즘 으로 동태 적 인 개념 도'하나의 인터페이스,여러 가지 방법'이 라 고 할 수 있다.자바 가 실 행 될 때 다 형 성 을 실현 하 는 기 초 는 동적 방법 으로 스케줄 링 하 는 것 입 니 다.이것 은 컴 파일 기간 에 과부하 방법 을 호출 하 는 체제 가 아 닙 니 다.다음은 계승 과 인터페이스 실현 두 가지 측면 에서 자바 가 실 행 될 때 다 형 적 인 실현 에 대해 이야기 하 겠 습 니 다.1.초 클래스 대상 인용 변 수 를 계승 하여 하위 클래스 대상 을 참조 하여 예 를 들 어 설명 합 니 다.//초 클래스 슈퍼 A class 슈퍼 A{int i=100 을 정의 합 니 다.  void fun()   {   System.out.println(“This is superA”); }}//슈퍼 A 의 하위 클래스 subB class subB extends 슈퍼 A{int m=1 을 정의 합 니 다.  void fun()   {   System.out.println(“This is subB”); }}//슈퍼 A 의 하위 클래스 subC class subC extends 슈퍼 A{int n=1 을 정의 합 니 다.  void fun()   {   System.out.println(“This is subC”);   }   }   class Test   {   public static void main(String[] args)   {   superA a;   subB b = new subB();   subC c = new subC();   a=b;   a.fun(); (1)   a=c;   a.fun(); (2)}실행 결 과 는:This is subB This is subC 상기 코드 에서 subB 와 subC 는 초 클래스 슈퍼 A 의 하위 클래스 입 니 다.우 리 는 클래스 Test 에서 3 개의 인용 변수 a,b,c 를 설명 하 였 으 며,하위 클래스 대상 을 초 클래스 대상 에 게 인용 변 수 를 인용 하여 동적 방법 으로 사용 합 니 다."왜(1)와(2)출력 하지 않 습 니까?This is supera"라 고 물 을 수도 있 습 니 다.자바 의 이러한 메커니즘 은 하나의 원칙 에 따른다.초 클래스 대상 이 변 수 를 인용 하여 하위 클래스 대상 을 인용 할 때 인용 대상 의 유형 은 변수의 유형 을 인용 하 는 것 이 아니 라 누구의 구성원 을 호출 하 는 방법 을 결정 한다.그러나 이 호출 된 방법 은 초 클래스 에서 정 의 된 것 이 어야 한다.즉,이불 클래스 가 덮어 쓰 는 방법 이다.따라서 상례(1)와(2)에 현혹 되 지 마 세 요.a.fun()이 라 고 쓰 여 있 지만(1)의 a 가 b 에 의 해 할당 되 어 하위 subB 의 인 스 턴 스 를 가리 키 기 때문에(1)호출 된 fun()은 실제 하위 subB 의 멤버 방법 fun()입 니 다.초 클래스 슈퍼 A 의 멤버 방법 fun()을 덮어 씁 니 다.같은(2)하위 클래스 subC 의 멤버 방법 fun()을 호출 합 니 다.또한 하위 클래스 가 계승 하 는 초 류 가 추상 류 라면 추상 류 는 new 연산 자 를 통 해 예화 할 수 없 지만 추상 류 의 대상 은 하위 클래스 대상 을 참조 하여 운행 시의 다 형 성 을 실현 할 수 있다.구체 적 인 실현 방법 은 상례 와 같다.그러나 추상 류 의 자 류 는 초 류 중의 모든 추상 적 인 방법 을 덮어 야 한다.그렇지 않 으 면 자 류 는 반드시 abstract 수식 부호 에 의 해 수식 되 어야 한다.물론 실례 화 될 수 없다.

좋은 웹페이지 즐겨찾기