본문 바로가기
Language/Java

추상메서드(abstract method)

by 태윤2 2020. 6. 11.

추상메서드

 

메서드 바디(=구현부 {})가 없는 메서드 // 바디가 없다 = 호출할 수 없는 메서드

메서드 리턴타입 앞에 abstract 키워드를 사용하며 구현부{} 대신 세미콜론(;) 명시

메서드의 실행할 코드 부분인 구현부가 없으므로 외부에서 호출되면 안되는 메서드

 

< 추상메서드 정의 기본 문법 >

[제한자] abstract 리턴타입 메서드명(파라미터,....);

 

추상클래스(abstract class)

객체 생성이 불가능한 클래스(=미 완성 클래스)

추상메서드가 호출되면 안되기 때문에 인스턴스 생성을 못하도록 차단

추상메서드를 포함하는 클래스는 반드시 추상클래스로 정의되어야 함

단, 모든 추상 클래스가 추상메서드를 포함하는것은 아니다

추상클래스는 추상메서드, 일반메섣, 생성자, 인스턴스 변수 등을 가질수 있다

인스턴스 생성은 불가능 하지만 상속은 가능하며, 다형성 활용도 가능

추상클래스를 상속받는 서브클래스에서는 반드시 추상클래스 내의

추상메서드에 대한 오버라이딩을 수행해야함 = > 오버라이딩 하지 않을 경우 상속 불가

이때, 상속받은 서브클래스를 추상클래스로 정의하면 오버라이딩 생략가능

단, 또 다른 서브클래스를 생성하여 언젠가는 오버라이딩을 해야한다!

추상메서드에 대한 구현을 강제함으로써 코드의 강제성 및 통일성 제공

 

< 추상 클래스 정의 기본 문법 >

[제한자] abstract class 클래스명 {

               // 인스턴스 변수

               // 생성자

               // 추상 메서드

               // 일반 메서드       }

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
abstract class AbstractClass {
    int num; // 인스턴스 변수
 
    public AbstractClass() { // 생성자
        num = 0;
}
 
    public void normalMethod() { // 일반 메서드
        System.out.println("추상클래스의 일반 메서드");
}
    // 추상메서드 정의 => 추상메서드를 포함하는 클래스는 반드시 추상메서드로 정의
 
    public abstract void abstractMethod();
 
}
 
// AbstractClass 를 상속받는 SubClass 정의
 
class SubClass extends AbstractClass {
        @Override
        public void abstractMethod() {
            System.out.println("서브클래스에서 오버라이딩 된 추상메서드!");
    }        
}
cs

 

'Language > Java' 카테고리의 다른 글

상수  (0) 2020.06.11
final 키워드  (0) 2020.06.11
instanceof 연산자  (0) 2020.06.09
캐스팅  (0) 2020.06.09
레퍼런스(참조형) 형변환  (0) 2020.06.05