오식랜드
[java] 다형성 (Polymorphism) 본문
반응형
다형성
- 다양한 형태가 존재한다는 의미
- 프로그램을 유연하게, 단순하게 만들어 준다
업 캐스팅
- super class와 그 클래스를 상속받은 sub class 들이 있을 때, sub class를 super class형 참조변수로 저장
- Object : 모든 class의 super class이므로, 모든 객체에 사용 가능
- 다만, super class에는 존재하지 않고, sub class에서 추가된 멤버는 사용이 불가능하다
SuperObject sub1 = new SubObject();
SuperObject sub2 = (SuperObject) (new SubObject);
sub1.subClassMethod(); --> err!
sub1.superClassMethod(); --> ok
Object sub3 = new SubObject();
다운 캐스팅
- sub class 참조변수는 super class 객체를 가르킬 수 없다
- 기본적으로는 다운 캐스팅이 불가능하다
- 업 캐스팅 된 참조변수를 형변환을 통해 다운캐스팅 하는 것은 가능하다
SuperObject sub1 = new SubObject(); --> 업 캐스팅
SubObject sub2 = (SubObject) sub1; --> 다운 캐스팅하여 sub2 변수에 저장
// 잘못된 예
SubOObject sub3 = new SuperObjet(); --> err!
// 유효한 예
SuperObject sub4 = new SubObject();
SubObject sub5 = (SubObject) sub4
다형성의 활용
- super class형의 객체 배열을 생성하여, 상속받은 자식 객체들을 포함할 수 있다
- 매개 변수에 super class형으로 인자를 받으면, sub class 객체를 넘겨받을 수 있음
instanceof
- 변수가 참조하고 있는 객체가 명시한 클래스로부터 생성되었는지를 검사
- true / false 반환
SuperObject sub = new SubObject();
if (sub instanceof SubObject()) {
// SubObject로부터 만들어진 객체
}else{
// 다른 객체를 참조하고 있음
}
method 재정의
- sub class에서는 super class의 method를 재정의 할 수 있다
- 예시) Object class의 equals() 재정의
-
// 기존의 equals와 같은 참조 범위(public)와 반환형(boolean)을 가져야 한다 public boolean equals(Object obj){ boolean result = false // 매개변수 받은 객체가 존재하고, MyObj로부터 생성된 객체일 때 if(obj != null && obj instanceof MyObj){ // 다운캐스팅 MyObj my = (MyObj) obj; // v1 : 정수형 변수 / v2 : 문자형 변수 if ((v1 == my.v1) && v2.equals(my.v2)){ // v1과 v2의 내용이 같으면 같은 객체라고 하기로 함 result = true; } } return result; }
반응형
'dev-log > java' 카테고리의 다른 글
[java] 상속 (0) | 2023.10.16 |
---|---|
[java] 배열 (0) | 2023.10.16 |
[java] 난수 생성 (0) | 2023.10.16 |
[java] 패키지(Package)와 모듈(Module) (0) | 2023.10.16 |
[java] 생성자 (0) | 2023.10.16 |
Comments