본문 바로가기

Dev. Java

[자바 기본기] 다형성

1. 다형성(polymorphism)이란? 

  • " 여러 가지 형태를 가질 수 있는 능력 "
  • " 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것 "
즉 , 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성



Tv            t  = new Tv();

        CaptionTv c = new CaptionTv(); 

        Tv            t  = new CaptionTv();


" 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있지만,

          반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다 "



Tv t = new CaptionTv();
CaptionTv c = new Tv(); 


<덧붙임>

=> TV 리모콘으로 CaptionTV를 조작하는 것은 가능하다.

   CaptionTV 리모콘으로 TV를 조작할 때, 리모콘에 있는 캡션 기능을 눌러봤자, 

   TV는 캡션 기능을 제공하지 않는다.







2. 참조변수의 형변환

- 서로 상속관계에 있는 타입간의 형변환만 가능하다.

    - 자손 타입에서 조상타입으로 형변환하는 경우 , 형변환 생략가능


자손타입 -> 조상타입 ( Up-castion ) : 형변환 생략가능

        자손타입 <- :="" down-casting="" nbsp="" p="">






3. instanceof 연산자

- 참조변수가 참조하는 인스턴스의 실제 타입을 체크하는데 사용.

     - 이항연산자이며 피연산자는 참조형 변수와 타입. 연산결과는 true, false.

     - instanceof의 연산결과가 true이면, 해당 타입으로 형변환이 가능하다.


<덧붙임>




4. 참조변수와 인스턴스변수의 연결

- 멤버변수가 중복정의된 경우, 참조변수의 타입에 따라 연결되는 멤버         변수가 달라진다.


    - 메서드가 중복정의된 경우. 참조변수의 타입에 관계없이 항상 실제 인스턴스       의 타입에 정의된 메서드가 호출된다.

<덧붙임>














5. 매개변수의 다형성

- 참조형 매개변수는 메서드 호출시 , 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄수있다.


<덧붙임>



- 제품들을 구입하기 위해서는 각 제품별로 buy 메서드를 구현해야 한다.

- 그러나, Product 타입의 참조변수를 사용한다면 제품에 상관없이 buy 메서드는 한 번만 

  구현하면 된다.





6. 여러 종류의 객체를 하나의 배열로 다루기(Vector)

- 조상타입의 배열에 자손들의 객체를 담을 수 있다.


Product p1 = new Tv();

        Product p2 = new Computer();

        Product p3 = new Audio();


       -> -> -> -> -> -> -> -> -> ->


       Product p[] = new Product[3];

       p[0] = new Tv();

       p[1] = new Computer();

       p[2] = new Audio();


<덧붙임>


Vector 예제







[참조]  자바의 정석

           



'Dev. Java' 카테고리의 다른 글

[자바 기본기] 인터페이스  (0) 2014.05.20
[자바 기본기] 추상 클래스  (0) 2014.05.20
[자바 기본기] 제어자  (0) 2014.05.18
[자바 기본기] package와 import  (0) 2014.05.17
[자바 기본기] 오버라이딩  (0) 2014.05.16