추상(abstract) 클래스

구현 코드 없이 메소드의 선언만 있는 추상 메소드를 포함한 클래스.(추상메소드가 반드시 포함되어야 하는것은 아닌것 같지만, 추상클래스를 사용하다보면 추상메소드도 같이 사용하게 된다.)
객체를 직접 생성할 수 없다.(↔ 실체클래스 : 객체를 직접 생성할 수 있는 클래스)
하지만 클래스들의 공통적인 특성(필드, 메소드)들이 선언되어 있다. 그래서, 추상클래스가 부모클래스이고 실체클래스가 자식클래스로 구현할 수 있다.

추상 클래스 선언 방법

abstract 예약어를 사용한다.

public abstract class 클래스명{

}

추상 클래스를 이용하는 자식클래스(실체클래스)는 이렇게 사용한다

public class 클래스명 extends 추상클래스명{
    
}

추상(abstract) 메소드

추상메소드는 추상 클래스에 선언된 메소드를 말한다. 메소드가 구현/정의 된 경우에는 추상 메소드가 아니다!

메소드 선언과 정의의 차이

메소드 선언 : 반환타입, 메서드 이름, 매개변수로 구성된다

int turnOn(int x);

메소드 정의(=메소드 구현) : 구현부(body)를 가진다.

int turnOff(int y){
// { } 중괄호 안이 구현부이다. 즉 {   } 중괄호를 포함하면 메소드 정의!
}

추상 메소드 선언 방법

추상 메소드는 abstract 예약어를 포함하여 작성한다.

public abstract class 추상클래스명 {
    public abstract 리턴타입 메소드명();
}

추상 메소드 선언 이유

  1. 추상 클래스는 하위 클래스에서 공통적으로 사용하는 특성을 포함하는데,하위클래스들이 같은 이름으로 된 메소드를 다른 내용으로 사용을 해야할 수도 있으므로 이를 위해서 추상 메소드를 선언한다.
  2. 반드시 하위 클래스에서 해당 메소드를 사용해야 한다고 정의하고 싶을 때 추상 메소드로 선언한다.

Animal.java

public abstract class Animal {
    public abstract void Sound();
}

예를들어, Animal 이름의 추상클래스가 Dog, Cat 을 하위클래스로 가질 때, Dog와 Cat의 울음소리를 다르게 출력하기 위해서 Sound 메소드를 추상메소드로 선언할 수 있다.

하위 클래스에서 추상메소드 재정의 방법

{
public class 하위클래스명 extends 추상클래스명{
...
@Override
//여기에 추상 클래스의 추상메소드를 재정의한다. @Override 어노테이션이 필요하다!
}