<aside> 💡
</aside>
완전하지 않은 클래스 (↔ concrete class; 추상 클래스가 아닌 클래스)
항상 추상 메소드를 포함한다. (추상 메소드는 구현 코드가 없다.)
선언만 하며 abstract 예약어를 사용한다.
{ ... } 안에 코드가 없더라도 중괄호를 사용한 것만으로도 구현한 셈이기 때문에 아예 없어야 완전한 추상 메소드이다.
추상 클래스는 모든 메소드가 구현되지 않았기 때문에 인스턴스로 생성할 수 없다. 상속을 하기 위해 만든 클래스이다.
Computer c1 = new Computer(); // 인스턴스 생성 불가
함수의 선언부 즉 반환 값, 함수 이름, 매개변수를 정의한다는 것은 곧 함수의 역할이 무엇인지, 어떻게 구현해야 하는지를 정의한다는 뜻.
<aside> 💡 int minus(int a, int b);
</aside>
package abstractex;
public abstract class Computer {
// public void display();
// public void typing();
public abstract void display();
public abstract void typing();
public void turnOn() {
System.out.println("전원을 켭니다.");
};
public void turnOff() {
System.out.println("전원을 끕니다.");
};
}
public void display() 혹은 typing() 으로 작성했을 경우, 구현부가 없기 때문에 body 를 작성하거나 abstract 예약어를 사용해서 추상 메소드로 만들 것을 제시한다.display(), typing()을 추상 메소드로 만들어도 이번에는 클래스명까지 오류가 표시되는데, 이는 메소드에서 abstract 예약어를 빼거나 해당 클래스를 추상 클래스로 만들어주어야 하기 때문에 예약어를 추가해주어야 한다.abstract 예약어를 사용하여 추상 클래스로 선언해야 최종적으로 오류가 없어진다.