본문 바로가기
JAVA

15일차// 객체지향 프로그래밍 간단정리(6)✍// 추상 abstract

by aesup 2021. 1. 29.
728x90

abstract

 

abstract란 한국어로는 추상으로 번역된다.

이에 대한 정의는 뒤에서 내리도록 하고 지금 단계에서는 abstract라는 것이 상속을 강제하는 일종의 규제라고 생각하자.

 

즉 abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것이 abstract다. 

 

✔추상 클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.

✔추상 메소드란 메소드의 시그니처만이 정의된 비어있는 메소드를 의미한다. 

✔ 추상 클래스(abstract class)란 하나 이상의 추상 메소드(abstract method)를 포함하는 클래스이다.

추상 메소드는 선언만 있고 본체는 없는 함수이며 선언부에 ‘abstract’ 라는 키워드를 붙인다.

추상 메소드가 포함되었다면 클래스도 추상 클래스이므로 클래스명 앞에도 ‘abstract’키워드를 붙여야 한다.
✔이 클래스를 사용할 때, 클래스 선언부의 abstract를 보고 이 클래스에는 추상 메소드가 있으니

상속을 통해 구현해줘야한다.



 

추상 메소드의 접근 지정자로 private는 사용할 수 없다(자식 클래스가 사용해야되기때문에)

MainClass

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
package main;
 
import abstractClass.AbstractClass;
import myclass.MyClass;
import you.YouClass;
 
public class MainClass {
    /*
     abstract: 추상
                 메소드를 하나이상 포함하고 있는 클래스
                 abstract method: 내용은 없고 선언만 되어있는 메소드
                 
                 
                 public void method(int n){ < - prototype :메소드의사양
                   처리
                 }
                 
                 
                 public abstract void method(); 선언만되어잇는걸 추상화이다
                 
     */
    
    
    public static void main(String[] args) {
        //AbstractClass ac = new AbstractClass();이건안된다
        
        
        MyClass mycls = new MyClass();
        mycls.method();
        mycls.abstractMethod();
        
        
        AbstractClass acls = new MyClass();//인스턴스를 부모클래스에서 잡았다.
        acls.method();
        acls.abstractMethod();
        
        AbstractClass bcls = new AbstractClass() {
            
            @Override
            public void abstractMethod() {
                // TODO Auto-generated method stub
                System.out.println(" bcls abstractMethod()");
            }
        };
        
        
        bcls.method();
        bcls.abstractMethod();
        
        
        AbstractClass absArr[] = new AbstractClass[3];
        absArr[0= new YouClass();
        absArr[1= new MyClass();
        absArr[2= new MyClass();
        
        
        
        for (int i = 0; i < absArr.length; i++) {
            absArr[i].method();
            absArr[i].abstractMethod();
            
            
            if(absArr[i] instanceof YouClass) {
                //YouClass y = (YouClass)absArr[i];
                //y.func();
                
                
                ((YouClass)absArr[i]).func();
            }
        }
        
        
    
        
    }
    
}
 
cs

 

AbstractClass

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package abstractClass;
 
public abstract class AbstractClass {
    private int number;
    
    public void method() {
        System.out.println("AbstractClass method() ");
    }
    
    
    
    public abstract void abstractMethod();
    //추상이다. 상상하다.    
    
    
    
    
}
cs
 

 

 

 

MyClass

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package myclass;
 
import abstractClass.AbstractClass;
 
public class MyClass extends AbstractClass{
    //메뉴 소스에서 오버라이드 클릭해서 설정가능
    @Override
    public void abstractMethod() {
        // TODO Auto-generated method stub
        System.out.println(" My Class AbstractClass method() ");
        
    }
 
}
cs

 

 

 

 

(instanceof 정리해놓기)

728x90