일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- OOP
- class
- bubble-sort
- 프로그래밍
- lang package
- 클래스 패스
- BufferedWrite
- 형변환 연산자
- java
- 연결된 예외
- 객체지향
- 암호론
- JSP
- 디렉티브
- try&catch
- 재귀호출기본
- 소수판정
- 현대암호
- 백준 알고리즘
- 공개키 암호
- 예외처리
- 2884
- LANG
- HTML
- 알고리즘
- jvm
- 자동 형변환
- 객체
- 백준
- 자료구조
Archives
- Today
- Total
코드일기장
[Java] 다형성 본문
다형성(polymorphism)
여러 가지 형태를 가질 수 있는 능력
조상 타입 참조 변수로 자손 타입 객체를 다루는 것
Parent p = new Parent(); //타입일치
Child c = new Child(); //타입일치
Parent p2 = new Child(); //타입불일치
위 3행 코드처럼 조상 타입 참조 변수로 자손 타입 객체를 다루는 것이 가능하다. (참고로 Child는 Parent에게 상속받았다.)
class MainClass{
public static void main(String[] args) {
Parent p = new Parent(); //타입일치
Child c = new Child(); //타입일치
Parent p2 = new Child(); //타입불일치
}
}
class Parent{
private int num;
void setNumber (int num) {
this.num=num;
return;
}
}
class Child extends Parent{
private int num;
void setNumber (int num) {
this.num=num;
return;
}
void numberOutput() {
System.out.println(this.num);
}
}
참조 변수 p는 총 멤버의 개수가 2개이고 참조 변수 c는 3개이다.
참조 변수 p2는 조상 타입의 참조 변수로서 자손 타입 객체를 생성했지만 p2의 멤버는 num과 setNumber() 두 개다.
자손 타입의 참조 변수로는 조상 타입의 객체를 가리킬 수는 없다.
Parent p = new Parent(); //타입일치
Child c = new Child(); //타입일치
Parent p2 = new Child(); //타입불일치
가능
Parent p = new Parent(); //타입일치
Child c = new Child(); //타입일치
Child c2 = new Parent(); //Error 타입불일치
불가능
불가능한 이유는 Child의 멤버가 Parent의 멤버보다 많다. 하지만 Parent에게 상속받은 멤버만 사용할 수 있게 되어 불가능한 코드가 되는 것이다.
결론적으로
부모 참조 변수로 자식 객체 인스턴스화 할 때는 부모 클래스가 자식보다 멤버가 항상 적거나 같으므로 자식에게 있는 멤버는 사용 안 하면 그만이지만,
자식 참조 변수로 부모 객체 인스턴스화 할 때는 자식 클래스가 부모 클래스보다 멤버가 항상 많거나 같기 때문에 부모의 멤버에는 자식의 멤버가 없으므로 에러가 난다.
다형성으로 참조 변수의 타입은 인스턴스의 타입과 반드시 일치하지 않아도 된다는 것을 알 수 있다.
Parent p = new Child();
'Java > OOP' 카테고리의 다른 글
[Java] instanceof 연산자 (0) | 2022.03.20 |
---|---|
[Java] 참조변수의 형변환 (0) | 2022.03.15 |
[Java] 접근 제어자 (access modifier) (0) | 2022.02.20 |
[Java] static, final, abstract의 정의 (0) | 2022.02.18 |
[Java] 패키지, import, static import (0) | 2022.02.05 |
Comments