다형성은 주로 두 가지 측면에서 객체 지향, 다중 상태 개체에서 매우 중요한 개념이다 :
- 오버로드 된 메서드 재정의
- 다형성 객체
다형성 객체는 두 가지 유형으로 구분된다 :
- 업 캐스팅 : 서브 클래스 객체 - 부모 클래스 객체
- 풀이 죽은 : 상위 개체 - 서브 클래스 객체
상승 전환, 자동으로 프로그램을 객체. 풀이 죽은 서브 클래스는 명시 적 전환의 유형을 지정해야합니다. 다음과 같은 형식은 다음과 같습니다
: 업 캐스팅 개체 父类 父类对象 = 子类实例;
개체 풀이 죽은 : 子类 子类对象 = (子类)父类实例;
케이스 객체를 업 캐스팅 한 다음
부모 클래스의 정의 :
public class Father {
public void fun1(){
System.out.println("father`s method fun1");
}
public void fun2(){
System.out.println("father's method fun2");
}
}
정의 서브 클래스
public class Son extends Father {
@Override
public void fun1() {
System.out.println("son's method fun1 ");
}
public void fun3(){
System.out.println("son's method fun3");
}
}
테스트 상향 전이
@Test
public void test() {
Son son = new Son();
Father father = son;
father.fun1();
}
검사 결과:
fun1 아들의 방법
분석 :
아버지의 fun1 메서드 호출하지만, 실제로는 서브 클래스 fun1를 호출합니다. 즉, 전환 후 개체까지가 발생할 때, 메소드가 서브 클래스에 의해 오버라이드 (override)해야 호출합니다. 그러나 아버지는 클래스 호출 아들 fun3 방법에 정의되어 있지 않습니다. 당신이 조정 fun3 방법을 원하는 경우, 서브 클래스의 인스턴스를 호출 할 필요가 있습니다.
개체 풀이 죽은 :
또는 위의 테스트 케이스를 사용 :
@Test
public void test2() {
Father father = new Son(); //向上转型
Son son = (Son) father; //向下转型
son.fun1();
son.fun2();
son.fun3();
}
결과:
아들의 방법 fun1의
Fun2에 아버지의 방법
아들의 방법 fun3
한가지 유의할 사항은 다음과 같습니다 변환해야 첫번째 내리 뜬 전에.