본문 바로가기

Programming/JAVA

JAVA 다형성에 관해..


다형성은 다양한 타입의 레퍼런스 변수가 동일한 형태의 객체를 참조할 수 있다는 의미.

부모의 객체가 자식의 클레스 형태객체를 참조하는 방식 등을 말한다.

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