다형성은 다양한 타입의 레퍼런스 변수가 동일한 형태의 객체를 참조할 수 있다는 의미.
부모의 객체가 자식의 클레스 형태객체를 참조하는 방식 등을 말한다.
class Parent
class Childen extends Parent 의 두 가지 클레스가 있을 때.
Children c = new Children(); 라고 선언하지만,
Parent p = new Children(); 와 같이 사용도 가능하다. 다른 타입의 레퍼런스 변수가
동일한 객체를 참조하고 있다.
* Virtual Method Invocation은 상속관계에서 오버라이딩된 동일한 이름의 method가 충돌했을 때
실행타임 시점의 메소드가 컴파일 타임 시점의 메소드보다 우선적으로 실행된다.
Ex) Parent의 getName()을 Children이 오버라이딩 한 상태일 경우
Parent p = new Chlidren() 으로 객체를 생성했을 때
p.getName(); 과 같이 메소드를 사용하면 Parent의 메소드를 사용할지 Children의 메소드를 사용할 지 혼돈이 된다.
JVM은 컴파일 시점인 Parent의 method를 사용하지 않고 실행타임 시점인 Children의 method를 사용한다.
이것을 Virtual Method Invocation 라고 부른다.
* Collection 은 두 가지 종류가 있다.
1. 이형 컬렉션 ( 서로 다른 타입의 객체를 담을 수 있다. ) - 다형성의 개념 사용.
2. 동형 컬렉션 ( 같은 타입의 객체만 담을 수 있다. )
간단히 말해서
Parent [] p = new Parent[2] ;
p[0] = new Children();
p[1] = new Parent(); 와 같이 서로 다른 타입의 객체를 포함한 배열 p 를 이형 컬렉션이라고 한다.
String [] s = new String[2];
s[1] = new String("aaa");
s[2] = new String("bbb"); 요런걸 동형 클레스 라고 한다.
* Type Casting
타입케스팅은 상속관계에서 하위 클레스의 메소드를 사용할 수 없기 때문에 사용해 준다.
Parent p = new Children(); 의 객체를 생성했을 때
객체 p는 Parent 타입의 객체이기 때문에 Children의 메소드는 사용할 수 없다. 그렇기 때문에
새로운 객체 Children c = (Children)p ; 와 같은 방식으로 타입 케스팅을 하면
Children의 메소드를 c를 이용해서 사용할 수 있다.
* instance of
객체가 어떤한 타입의 인스턴스인지를 구분해 주는 명령어 이다.
객체이름 instanceof 클레스이름 <- 이런 형태로 사용한다.
if( p instanceof Parent ) 이렇게 많이 사용한다. 객체가 맞으면 true 아니면 false를 리턴해 준다.
'Programming > JAVA' 카테고리의 다른 글
JAVA main() 메소드가 public static인 이유. (0) | 2010.02.21 |
---|---|
JAVA Wrapper 클레스 , static 키워드 (0) | 2010.02.19 |
JAVA 잡다한 정리. (0) | 2010.02.18 |
JAVA 배열 (0) | 2010.02.11 |
SPRING framework 에 대하여 .. (0) | 2010.02.11 |