다형성에는 두 가지 유형이 있습니다.
1) 컴파일 할 때, 동일한 이름의 다중 방법에 대한 다형성, 컴파일 중에 동일한 이름을 실행하는 방법 중 하나를 결정할 수 있다면 컴파일 할 때 다형성이라고합니다.
2) 편집 중에 다형성이 결정되지 않으면 런타임 동안 동일한 이름의 방법 중 어느 것이 런타임시 다형성이라고 불리는지를 결정할 수 있습니다.
메소드는 두 가지 유형의 다형성을 다룹니다. 객체 가이 범주를 얻을 때 컴파일 할 때 다형성입니다.
xxxx x1 = new xxxx (매개 변수 목록); // 객체는 참조 유형과 일치합니다.
xxx xx1 = 새로운 xxx (매개 변수 목록);
x1.tstring (); // 다형성을 컴파일 할 때 xxx 클래스 방법을 실행하십시오.
xx1.tstring (); // xxxx 클래스 범위를 수행 할 때 다형성.
XXXX는 XXX의 상위 클래스입니다.
하위 오브젝트는 부모 객체 일뿐 아니라 상위 클래스 객체와 하위 클래스 객체에 호환성이 할당되며 부모 클래스 객체는 하위 클래스 객체로 할당 할 수 있습니다.
xxxx x2 = new xxx (매개 변수 목록); // 하위 클래스 인스턴스를 얻습니다.
x2.tostring (); // 런타임에서 다형성
X2 문은 부모 클래스의 인스턴스이지만 하위 클래스 XXX를 얻습니다.
이것들은 두 가지 사례로 나뉩니다.
서브 클래스가 상위 메소드를 포함하는지 여부에 따라 하위 클래스 메소드가 실행됩니다.
적용 범위가 없으면 부모 방법이 실행됩니다.
객체의 클래스에 따라 컴파일 할 때 시스템은 결국 실행 해야하는 방법을 결정할 수 없으며 런타임에만 결정할 수 있으므로 런타임시 다형성입니다.
부모 클래스는 모든 서브 클래스 메소드를 실행하지 않으며 해당 상위 클래스/하위 클래스에서 다루는 하위 클래스 메소드 만 실행할 수 있습니다.
Java 다형성 구현
Java의 다형성 및 C ++는 런타임에 동적 바인딩 또는 결합에 의해 실현됩니다. 컴파일러가 객체에서 참조 된 메소드를 호출 할 때, 컴파일러는이 참조가 변수 문 또는 유형 서브 클래스의 객체를 가리키는 지 여부를 알지 못하기 때문입니다. 따라서 컴파일러는이 호출의 특정 메소드에 바인딩 될 수 없습니다. Java (RTT)를 통해 실행되는 유형 인식 (RTT) 만 런타임에 특정 메소드에 바인딩됩니다.
재 작성 및 메소드의 다시로드 과부하는 Java 다형성의 다른 표현입니다. 제어 오버 링은 부모와 서브 클래스 사이의 다형성이며, 과부하는 과부하가 클래스의 다형성 표현입니다.
구체적인 예를 제시하십시오.
Class People {public String toString () {return "I am a People!"; };} Class Girl은 사람들을 확장합니다. {public String tostring () {return "I am a girl!"public void sing () {}; public class testToString {public static void main (String Args []) {peical p = new girl ();
결과 실행 :
나는 여자 야!
P는 사람들에 대한 언급이지만 Runt의 소녀 대상이기 때문입니다.
Java 다형성에 대한 두 번의 이해
면책 조항, 여기 다른 급우의 예, 원래 링크 : http://blog.csdn.net/thinkghoster/article/details/2307001
테스트 주제
클래스 A {public String show (d obj) {return "a and d";} public string show (a obj) {return "a are"{return "b and b";} public String show ) {return "b and a";} class c는 b {} 확장 b {} public static void main (st rags []) {a a1 = new a (); b = 새로운 c = d d (); ); )); // 5.show (d)); c)); / 8 system.out.println (b.show (d));
답변
A 및 AA 및 AA 및 DB 및 AB 및 AA 및 DB 및 BB 및 BA 및 D
분석 나는이 주제를 시작했습니다. 4, 5, 6 및 9가 모두 잘못되었습니다.
우선, 우리는 다시 쓰기 및 과부하를 깊이 이해해야합니다.
둘째,이 문장에 대한 깊은 이해에서 "수퍼 클래스 객체 참조 변수가 서브 클래스 객체를 참조 할 때, 참조 변수보다는 참조 객체의 유형은 누구의 멤버 방법을 결정하지만,이 호출 방법은 슈퍼 클래스에 있어야합니다. 그 안에 정의됩니다. 즉, 하위 클래스에 의해 다시 쓰는 방법 "" "
그런 다음이 질문을 분석합시다
질문 : B가 부모 A의 쇼 방법을 다시 작성했다고 생각하십니까? 다시 쓰면 몇 명은 다시 작성 했습니까?
답 : 다시 작성, 재 작성, 즉 공개 문자열 쇼 (A OBJ), 공개 문자열 쇼 (B OBJ)가있는 이유는 무엇입니까?
예제 분석
위의 분석을 읽은 후에는 두 가지 예를 분석합니다.
1. A2. 쇼우 (b) :
A2는 참조 변수, 유형 A, B는 B의 인스턴스입니다. 우선, 클래스 A에서 쇼 (B obj)를 찾으십시오. 그래서 나는 A의 슈퍼 클래스에서 그것을 발견했고 A는 슈퍼 클래스가 없었기 때문에 A. this (Super) B), (Super) B로 돌아 서서 (OBJ)를 보여주는 방법이 발견되었습니다. A에서는 A2가 언급 한 클래스 B의 객체로 인해 B를 다시 작성한 A의 쇼 (ABJ) 메소드가 마침내 클래스 B의 쇼 (OBJ)에 고정되면 출력은 "B 및 A"입니다.
2. A2. 쇼우 (C) :
A2는 참조 변수, 유형 A, B는 B의 인스턴스입니다. 우선, 클래스 A에서 Show (C OBJ)를 찾으십시오. 그래서 나는 그것을 A의 슈퍼 카테고리에서 발견했고 A는 슈퍼 클래스가 없었기 때문에 A.this ((Super) c), (슈퍼) C로 바뀌 었습니다. 지금까지,이 a2.show (c)는 a2 a2가 되십시오 .Show (b)의 문제 및 A2.Show (b)는 출력 "B 및 A"로 분석되었으므로 여기에는 "B 및 A"출력도 있습니다.