[TIL] 추상 클래스
추상 클래스 Abstract 란?
선언만 있고 정의가 없는 하나 이상의 추상 메소드를 갖는 클래스로 하위 클래스에서 재정의 할 것으로 예상되는 메소드에 대해 메모리 낭비없이 미리 호출 계획을 세워 두기 위해 작성한다.
특징:
- 클래스가 적어도 하나의 abstract 메소드를 포함할 때 클래스 명 앞에 abstract 키워드를 붙여서 명시해야한다.
- 추상 클래스는 final, static 키워드 사용이 불가능하다.
- 추상 클래스로 선언한 경우 미완성된 클래스 이므로 객체 생성이 불가능하다.
- 추상 클래스는 추상 메소드를 포함 할 수 있으나 반드시 포함하는 것은 아니며 일반 메소드를 정의할 수 있다.
- 추상 메소드가 없는 추상 클래스도 객체는 생성할 수 없다.
- abstact 키워드는 클래스와 메소드에서만 사용 가능하며 필드(멤버 변수)나 로컬 변수에는 사용할 수 없다.
- 추상 클래스는 독립적으로 존재할 수 없고, 하위 클래스를 가지며 하위클래스를 통해서만 객체 생성이 가능하다.
- 추상 클래스를 상속받은 하위클래스는 추상 클래스가 아닌 경우 반드시 모든 추상 메소드를 재정의해야한다.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
package ex0810;
public class Abstract_SortApp {
public static void print(int[] value) {
for(int n : value) {
System.out.print(n+" ");
}
System.out.println();
}
public static void main(String[] args) {
int[] value = {30,2,7,20,62,45,61,70};
SortInt si = new SelectionSort();
System.out.print("source data :" );
print(value);
si.sort(value);
System.out.print("sort data :" );
print(value);
}
}
//추상 클래스
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;
}
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() {
int pass = 1;
boolean flag;
do {
flag = false;
for(int i =0; i<length()-pass;i++) {
if (compare(i,i+1)>0) {
swap(i,i+1);
flag = true;
}
}
pass++;
}while(flag);
}
}
|
cs |
'Language > JAVA' 카테고리의 다른 글
[TIL] 중첩 클래스 (0) | 2020.08.11 |
---|---|
[TIL] 인터페이스 (0) | 2020.08.11 |
[TIL] 상속 (0) | 2020.08.10 |
[TIL] 자바의 기본 API 클래스 - Date 클래스 (0) | 2020.08.10 |
[TIL] 자바의 기본 API 클래스 - Calendar 클래스 (0) | 2020.08.06 |
댓글