IT 개발노트

추상클래스란? 본문

기초튼튼/JAVA

추상클래스란?

limsungju 2019. 1. 27. 19:56

1. 추상클래스
1.1 추상클래스란?

- 추상클래스(abstract class)는 미완성 설계도로 비유할 수 있는 구체화되지      않은 클래스이다.
- 미완성의 추상 메서드를 포함하고 있으며, 반드시 상속을 통해 완성한 후 사    용할 수 있다.
* 추상클래스 자체로는 인스턴스 생성이 불가능하다.
- 추상클래스는 추상메서드 외에도 일반적인 멤버변수와 메서드, 생성자도 포    함한다.

1.2 추상 클래스의 특징
- 클래스 앞에 abstract키워드를 붙여서 정의
- 인스턴스 생성 불가
- 추상 메서드를 포함(그 외 멤버변수, 메서드, 생성자도 포함가능)

1.2.1 추상 클래스 생성방법

1
2
3
abstract class [클래스명] {
// 클래스 내용
}


* 추상메서드가 없어도 클래스에 abstract 키워드를 붙이면 추상클래스가되고 인스턴스 생성이 불가능하다.

1.3 추상메서드
- 추상클래스 내에 선언부만 작성하고 구현부는 작성하지 않은 형태로 만든      메서드를 추상메서드라고 한다.
- 상속받는 클래스에서 구현하도록 하기 위해 구현부는 작성하지 않은 형태이    다.

1.3.1 추상메서드 생성방법

1
abstract [리턴타입] [메서드명]();


* 추상클래스를 상속받은 자식 클래스는 추상클래스의 추상메서드를 모두 구현해줘야 한다. 그렇지 않을 경우 자식 클래스도 추상클래스로 지정해줘야한다.

1.4 추상클래스 작성
- 상속의 개념이 부모 클래스의 속성과 기능을 물려받아 구체화하는 것이라면,
  추상화는 기존 클래스의 공통부분을 뽑아서 부모 클래스를 만드는 것이라고    할수 있다.
- 추상화 : 클래스간의 공통점을 찾아내어 부모 클래스를 만든다.
- 구체화 : 상속을 통해 클래스를 구현, 확장한다.

예제 1

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
87
88
package sungju.Java.AbstractClassTest;
 
public class AbstractClassTest {
    public static void main(String[] args) {
        // Unit unit = new Unit(); // 인스턴스 생성 불가
        Marine marine = new Marine();
        Tank tank = new Tank();
        Dropship dropship = new Dropship();
         
        marine.move(1020);
        marine.stop();
        marine.stimPack();
         
        tank.move(3040);
        tank.stop();
        tank.changeMode();
         
        dropship.move(5060);
        dropship.stop();
        dropship.load();
        dropship.unload();
    }
     
}
 
abstract class Unit {
    String unitName;
 
    Unit(String unitName) {
        this.unitName = unitName;
    }
 
    abstract void move(int x, int y);   // 추상클래스
     
    void stop() {
        System.out.println(unitName + " stop!");
    }
}
 
class Marine extends Unit {
 
    Marine() {
        super("Marine");
    }
 
    void move(int x, int y) {
        System.out.println(unitName + " move to x : " + x + ", y : " + y); 
    }
 
    void stimPack() {
        System.out.println("Stim Pack Yeah!!!");
    }
 
}
 
class Tank extends Unit {
     
    Tank() {
        super("Tank");
    }
 
    void move(int x, int y) {
        System.out.println(unitName + " move to x : " + x + ", y : " + y); 
    }
 
    void changeMode() {
        System.out.println("Change Mode!");
    }
}
 
class Dropship extends Unit {
     
    Dropship() {
        super("Dropship");
    }
 
    void move(int x, int y) {
        System.out.println(unitName + " move to x : " + x + " / y : " + y);
    }
 
    void load() {
        System.out.println("Load");
    }
 
    void unload() {
        System.out.println("Unload");
    }
}


- move( )추상 메서드를 포함한 Unit추상 클래스를 대상으로 다른 클래스에서    상속하여 각각 구현 후 실행한 결과를 확인할 수 있다.
- 5번째 줄에 Unit unit = new Unit( );은 추상클래스에 대해 객체를 생성한 것    인데 실행하면 'Cannot instantiate the type Unit'이라는 에러 문구가 출력되    어, 추상 클래스 자체로는 인스턴스를 생성할 수 없음을 확인할 수 있다.

'기초튼튼 > JAVA' 카테고리의 다른 글

내부 클래스란?  (0) 2019.01.29
인터페이스란?  (0) 2019.01.28
다형성이란?  (0) 2019.01.26
제어자란?  (0) 2019.01.25
오버라이딩이란?  (0) 2019.01.25