객체 형변환
// 형변환 규칙
부모클래스 객체이름 = new 자식클래스();
- 객체 참조변수의 경우에도 형변환이 이루어짐.
- 위 소스코드에서 왼쪽 항(Parent)과 오른쪽 항(Child)의 객체 유형이 다른 경우,
서로 상속관계에 있고 왼쪽객체(Parent)가 오른쪽 객체(Child)의 상위 클래스인 경우에만 암묵적 형변환 이 일어난다.
암묵적 형변환
- 암묵적 형변환이 되면 자식클래스가 부모클래스에게 상속받은 기능만 사용하도록 제한
- 주의할 점 : 원래 자식클래스의 기능을 사용하지못하게 하는것이지 없애는것 은 아니다.
명시적 형변환
// 명시적 형변환 방법
부모클래스 객체이름 = (부모클래스) 자식클래스;
- 부모클래스의 객체를 자식클래스 형태로 변환
- 명시적 형변환 조건
- 객체가 최초 생성될 때 자식클래스형태로 생성, 부모클래스 형태로 암묵적 형변환이 된 상태를
다시 원래의 자식클래스로 되돌릴 경우에만 가능.
- 객체가 최초 생성될 때 자식클래스형태로 생성, 부모클래스 형태로 암묵적 형변환이 된 상태를
ChildClass child1 = new ChildClass();
ParentClass parent = child1;
ChildClass child2 = (ChildClass) parent;
명시적 형변환이 불가능한 경우
// 최초 객체생성이 부모형태로 만들어진 경우
Unit u = new Unit();
Army army = (Army) u;
// 최초 생성된 것과 다른 형식으로 변환하는 것은 불가능 하다.
Army army = new Army();
Unit u = army;
Navy navy = (Navy) u;
- 위 두경우 모두 문법적 오류는 아니기 때문에 이클립스에서는 에러를 검출하지 못하지만
프로그램을 실행했을 경우에는 에러발생.
객체 배열
- 일반 데이터 타입의 배열과 동일한 개념으로 같은 클래스의 객체 여러개를 그룹화 가능
일반 데이터 형의 배열생성과 객체 배열생성 비교
일반 데이터 형 배열의 경우 | 객체 배열의 경우 |
---|---|
int[] data = new int[3]; | Army[] data = new Army[3]; |
배열의 요소 할당처리 | |
일반 데이터형 배열의 경우 | 객체 배열의 경우 |
data[0] = 1; data[1] = 1; data[2] = 1; |
data[0] = new Army(); data[1] = new Army(); data[2] = new Army(); |
객체 배열의 활용
1. 일괄처리 가능
for (int i=0; i < units.length; i++){
units[i].attack();
}
- 서로 다른 객체를 부모형태의 배열에 담게 되면 반복문으로 일괄처리 가능
- 배열의 각 요소를 통해 메서드가 Override되어 있을 때, 부모의 메서드가 아닌 자신이 재정의한 기능을 뜻함.
2. 원래의 기능으로 복귀
instanceof 연산자는 어떤 객체에 대한 출처를 판단하여 boolean형으로 결과 반환
// instanceof 연산자의 사용(1)
if (unit[0] instanceof Army) {
Army temp = (Army) unit[0];
}
// instanceof 연산자의 사용(2)
// 반복문 안에서 사용할 경우 배열의 크기, 인덱스의 위치에 종속되지 않고 배열에 속해있는 모든객체에 대해 처리가능.
for (int i=0; i < units.length; i++) {
if (units[i] instanceof Army) {
Army a = (Army) units[i];
a.tank();
}
else if (units[i] instanceof Navy) {
Navy n = (Navy) units[i];
n.nucleus();
}
else {
AirForce f = (AirForce) units[i];
}
}
'JAVA' 카테고리의 다른 글
JAVA (Static, 익명클래스) (0) | 2020.06.11 |
---|---|
JAVA(추상화, 인터페이스) (0) | 2020.06.10 |
JAVA(상속성, 다형성) (0) | 2020.06.09 |
JAVA(자바빈즈(Java Beans), 은닉성, 상속성) (0) | 2020.06.09 |
JAVA(클래스, 객체, 생성자) (0) | 2020.06.04 |
댓글