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 |
댓글