package ex0726;
public class Ex01_abstract {
public static void main(String[] args) {
// SortInt si = new SortInt(); // 컴파일 오류. 추상 클래스는 객체 생성 불가.
// 추상 클래스는 반드시 하위 클래스가 존재하고 하위 클래스를 통해서만 객체를 생성
int[] data = new int[] {40,50,30,35,25};
// SortInt si = new BubbleSort(); // 업캐스팅
SortInt si = new SelectionSort();
print("source data : ", data);
si.sort(data);
print("sort data : ", data);
}
public static void print(String title, int[] value) {
System.out.print(title);
for(int n : value) {
System.out.print(n+" ");
}
System.out.println();
}
}
추상 클래스 (abstract class)
- 선언만 있고 정의가 없는 하나 이상의 추상 메소드를 갖는 클래스.
- 추상 메소드가 하나 이상 존재하는 경우 반드시 추상 클래스로 선언 해야 한다.
- 하위 클래스에서 overriding할 것으로 예상되는 메소드를 메모리 낭비 없이 미리 호출 계획을 세워 두기 위해 작성한다.
- 추상 클래스는 객체를 생성할 수 없다.
- 추상 클래스를 상속 받은 하위 클래스는 추상 클래스가 아닌 경우 상위 클래스의 추상 메소드를 재정의 해야한다.
- 추상 메소드가 없어도 추상 클래스로 작성할 수 있다.
abstract class SortInt {
private int[] value;
protected abstract void sorting(); // 추상 메소드
public void sort(int[] value) {
this.value = value;
sorting();
}
// 배열의 길이
protected int length() {
int n = -1;
if(value != null) {
n = value.length;
}
return n;
}
// 두 정수 비교. final 메소드 - 하위클래스에서 재정의 불가
protected final int compare(int i, int j) {
return value[i] - value [j];
}
// 배열의 두 요소 값을 서로 바꾸기
protected final void swap(int i, int j) {
int t = value[i];
value[i] = value[j];
value[j] = t;
}
}
class SelectionSort extends SortInt {
@Override
protected void sorting() {
for(int i = 0; i < length() - 1 ; i++) {
for(int j = i+1; j < length(); j++) {
if(compare(i, j) > 0) {
swap(i, j);
}
}
}
}
}
class BubbleSort extends SortInt{
@Override
protected void sorting() {
boolean flag = true;
for(int i = 1; flag ; i++) {
flag = false;
for(int j = 1; j < length() - i; j++) {
if(compare(j, j + 1) > 0) {
swap(j, j+1);
flag = true;
}
}
}
}
}
'쌍용강북교육센터 > 7월' 카테고리의 다른 글
0726_Ex03_interface 인터페이스 (0) | 2021.07.26 |
---|---|
0726_Ex02_interface (0) | 2021.07.26 |
0723_Ex05_ClassTypeCast : 클래스 타입 캐스트 (0) | 2021.07.23 |
0723_Ex04_ClassTypeCast (0) | 2021.07.23 |
0723_Ex03_ClassTypeCast : up-casting, down-casting (0) | 2021.07.23 |