다형성(Polymorphism)
- 부모Type의 변수에 자식Type 객체를 대입
primitive type short s; byte b; int i; long l; l = s; l = b; l = i; l = 30l; -> 다형성은 객체에 관한 것이지만 long type의 l에 다른 type인 short, byte, int의 데이터를 대입할 수 있다는 개념이 다형성이다. But, primitive type에서는 다형성이라고 하지 않는다. |
| |||||||||||||||||||||||||||||
Animal a = new Animal(); a = new dog(); a = new cat(); a = new Human(); | Animal c = new Cat(); c.eat(); c.cry(); →컴파일 에러(type check)
변경 Animal a = new Cat(); Cat c = (Cat)a; c.cry(); |
※ class 변수 = new 생성자(); 변수.메소드();
→ compile 시점에는 type, 실행 시점에는 객체(값)
① 다형성 : 부모에 정의된 메소드만 사용할 수 있다. 자식에 선언된 메소드를 사용하려면 형 변환이 필요
② Polymorphic Argument
ex) void go(Animal a)
- Overloading의 경우에는 또 다른 객체를 추가한다면 overloading된 메소드를 하나 더 추가해야하지만 polymorphism으로 인해 Animal 하위의 클래스를 메소드의 추가 없이 overriding을 통해 사용할 수 있다.(확장성)
Case 1 Super s = new Super() sub1 sub = (sub1) s; → sub1 s = new Super(); →compile시점에서는 형(Type)만을 검사하기 때문에 가능하지만 실행시점에서는 실행이 되지 않는다. 큰 type의 객체가 값의 type보다 커야한다.
|
|
Case 2 Sub1 sub1 = new Sub1(); Sub2 sub2 = (Sub2) sub1; → Sub1과 Sub2는 부모와 자식class의 관계가 아니기 때문에 compile이 되지 않는다. |
Heterogeneous Collection
- 다른 type의 Data들을 모으는 배열(객체)
- 배열에 다형성이 적용된 것
- 부모 type의 배열에 자식 type 객체들을 할당(대입)
'Wanna be a Programmer > Java Programming' 카테고리의 다른 글
Java Programming - Abstract vs Interface (0) | 2012.07.03 |
---|---|
Java Programming - 의존관계(Dependency), Final (0) | 2012.07.02 |
Java Programming - 상속, 메소드 오버라이딩, super (0) | 2012.07.02 |
Java Programming - Static vs Instance, 접근제한자 (0) | 2012.07.02 |
Java Programming - 패키지, Import, JAVA 소스 파일 구조 (0) | 2012.07.02 |