본문 바로가기
공부방/자바프로그래밍

자바 다형성

by 오후 네시 2020. 8. 12.

1. 다형성이란


하나의 참조변수로 여러 자료형의 객체를 참조할 수 있는 것.

즉, 부모 클래스의 참조변수로 자식 클래스의 객체를 다룰 수 있는 방법

(변수의 자료형은 부모클래스이지만, 실질적으로 구현해서 가리키고 있는 클래스는 자식클래스라는 의미임. 이렇게 하면 여러개의 자식클래스간 형변환을 할 필요가 없음)


예) Object 클래스는 모든 클래스의 조상임.


Object a = 10;

a = 10.5;

a = true;


값을 저장하는 변수는 기본자료형뿐임.

따라서 클래스 타입의 자료형은 주소를 저장하는 변수임.

따라서 Object a=10; 이라는 것은 말이 안 되는 코드임.


원칙대로 하면

new 연산자를 이용해서

Object a=new Integer(10); -> 이렇게 써야 함

이러면 변수 a에는 10이 들어가 있는 메모리의 주소 값이 들어가게 됨..

그러나 이렇게 하면 복잡하므로,

특별히 자바가 기본자료형 선언하는 것처럼 쓸 수 있도록 허용해 준 것뿐임..


▶ 다형성과 추상화 - 다형성은 추상화와도 연관이 있음.



2. 예제를 통한 다형성 설명


class AA{

 int a=10;

public void print(){

 Ssytem.out.println(a);

}

} //end of class AA


class BB extends AA{

 int a=20;


 @override

public void print(){

 Ssytem.out.println(a);

}

} //end of class BB


public calss Poly{

 public static void main(String[] args){

AA aa=new BB();

aa.print();

 }

} //end of class Poly


좌변에 부모 클래스 자료형, 우변에 자식 클래스 자료형을 적으면 자식 클래스의 print 메소드가 호출됨. -> 다형성이 적용된 사례임.


aa 참조변수는 AA 타입이므로 부모 클래스인 AA를 가리키고 있다. 그러나 print() 호출 시 자식 클래스에 print()가 오버라이딩 되어 있는 것을 컴파일러가 알고 있기 때문에 자식 클래스의 print()가 호출된다.


3. 다형성을 쓰는 이유


다형성은 변수들이 같은 자료형을 가지고 있어야 하지만, 상황에 따라 다른 메소드를 호출해야 할 때 쓰인다.


Printer p1=new dotPrint();

Printer p1=new inkjetPrint();

Printer p1=new laserPrint();


-> Printer 타입의 p1 변수 하나로 세 개의 클래스에 있는 각기 다른 메소드를 쓸 수 있다.


그래서 자바에서는 다형성을 적용한 코딩방식이 많다.


Tip:


getClass()

 -> 현재 실행 중인 클래스의 정보를 보여주는 메소드.



'공부방 > 자바프로그래밍' 카테고리의 다른 글

자바 유용한 클래스들 - Object 클래스  (0) 2020.09.22
자바 내부클래스  (0) 2020.09.07
자바 인터페이스  (0) 2020.08.31
자바 추상화  (0) 2020.08.23
자바 final  (0) 2020.08.07
자바 static 변수(정적변수)  (0) 2020.07.30
자바 상속  (0) 2020.07.26
자바 생성자  (0) 2020.07.20

댓글