객체 배열
일반 데이터 타입의 배열과 동일한 개념.
같은 클래스의 객체 여러개를 그룹화 할 수 있음.
* 동일한 클래스의 객체는 배열로 묶어서 여러개 한번에 제어 가능.
일반 데이터형.. int[] data = new int[3];
객체 배열 .. Array[] data new Array[3];
각 경우에 대한 배열의 요소 할당 처리 : 일반 데이터형은 단순하게 값을 대입함. but 객체 배열은 new를 사용하여 객체 할당 필요
ex)
data[0] = new Array();
data[1] = new Array();
data[2] = new Array();
- 부모 클래스의 배열에 자식 클래스의 객체 넣기
: 배열의 생성이 부모 클래스로 지정되었을 경우, 모든 자식 클래스의 객체들은 그 배열에 포함될 수 있음.
객체 배열과 객체 형변환 함께 사용
1. 원래 기능으로 복귀
배열의 각 요소가 확장된(독자적인) 기능을 사용하기 위해서는 원래의 클래스 형태로 명시적 형변환이 이루어져야 함.
반복적으로 처리되는 과정에서 몇번째 요소가 어떤 클래스에서 최초로 생성되었는지 판단하기 어려움.
instanceof 연산자 : 어떤 객체에 대한 출처를 판단하여 boolean형으로 결과 반환.
*반복문 사용 가능, 배열에 속해있는 모든 객체들에 대해 명시적 형변환 처리 가능
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package Object_Arr;
public class Main01 {
public static void main(String[] args) {
/*
* 부모 클래스에 대한 객체 배열을 생성하고,
* 배열의 요소에 자식 클래스 객체를 할당하면,
* 자동으로 암묵적 형변환이 이루어져
* 순서나 종류에 상관없이 배열에 저장 가능.
*/
//부대 지정
Unit[] units = new Unit[5];
units[0] = new AirForce("공군1호");
//이런식으로 부대 지정 가능.
//부대 일괄 공격
/*
* 각각의 객체가 유닛을 상속한 이후에 독립적으로 추가한 기능을 사용하기 위해서는
* 원래의 클래스 형태로 명시적 형변환을 처리.
* 이때 원래의 클래스를 판별하기 위해서 instanceof 연산자를 사용
*/
for (int i = 0 ; i<units.length; i++) {
units[i].attack();
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];
f.bombing();
}
}
}
}
|
cs |
추상화
특정 클래스를 상속받은 경우, 부모의 특정 메서드를 무조건 재정의하도록 강제.
상속성 : 객체간의 공통적인 기능을 관리하기 위한 기법
코드의 재사용을 통하여 프로그램 유지보수 편리하게 만듦.
다형성(오버라이드/오버로드) 서로 다른 기능이지만 메서드의 이름을 공통되게 처리 -> 전체 프로그램의 일관성 유지
@Override 키워드를 사용하지 않고 메서드를 재정의하는 과정에서 이름에 실수가 있어도 에러가 아닌 새로운 메서드의 정의로 인식함. 따라서 의도치않은 실행결과 초래 가능
@Override 키워드를 사용하더라도 자식 클래스를 구현하는 실수로 인하여 부모의 기능을 재정의하지 않았다면 다형성 구현 실패.
상속 처리 시, Override 강제하기
특정 메소드 재정의를 강제함-> 자식 클래스 작성 위한 가이드 완성.
설계도를 소스코드 형태로 제시한다고 생각하면 편함.
추상 메서드
abstract 키워드 사용하여 메서드 정의
가이드라인 제시가 주 목적, 따라서 선언만 가능하고 구현부 없음.
추상 메서드를 한 이상 포함하고 있는 클래스는 반드시 추상 클래스로 정의되어야 함.
'Language > JAVA' 카테고리의 다른 글
객체 배열 (0) | 2021.09.28 |
---|---|
Constructor & Overloading (0) | 2021.09.28 |
다형성(오버라이드,오버로드)/객체 형변환/암묵적 형변환 (0) | 2021.08.08 |
클래스, getter그리고setter, 접근한정자 (0) | 2021.08.01 |
Constructor (0) | 2021.07.29 |