본문 바로가기

[TIL] 추상 클래스

인포꿀팁 발행일 : 2020-08-10

추상 클래스 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

댓글