본문 바로가기

Wanna be a Programmer/Java Programming

Java Programming - 다형성(Polymorphism), Heterogeneous Collection

다형성(Polymorphism)


- 부모Type의 변수에 자식Type 객체를 대입


primitive type

short s;

byte b;

int i;

long l;

l = s;

l = b;

l = i;

l = 30l;

-> 다형성은 객체에 관한 것이지만 long typel에 다른 typeshort, byte, int의 데이터를 대입할 수 있다는 개념이 다형성이다. But, primitive type에서는 다형성이라고 하지 않는다.

 

Animal

 

eat()

 

 

 

 

 

 

 

 

 

 

 

 

Dog

 

Cat

cry()

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;

Sub1Sub2는 부모와 자식class의 관계가 아니기 때문에 compile이 되지 않는다.

 


Heterogeneous Collection


- 다른 typeData들을 모으는 배열(객체)

- 배열에 다형성이 적용된 것

- 부모 type의 배열에 자식 type 객체들을 할당(대입)